title: Release, Dealloc, and the Self reference
body: <p>So I thought I had all these questions all figured out. Then all of a sudden I get an error (a crash) I can't figure out. Then after doing research to remedy the crash, I notice everything that I thought I knew about these critical areas are somewhat wrong.</p>
  
  <p>Below are 8 questions I am just going to shoot out there in hopes of somebody answering - the answers to these will greatly help me get my understanding back on track. Thanks ahead of time!</p>
  
  <p>Q1) Is it okay to call Release on an object if that reference is nil? This should be harmless, right?</p>
  
  <p>Q2) Is it okay to call Release on an object if that reference has been released and as a reference count of 0?</p>
  
  <p>Q3) Is it necessary to set a reference to nil AFTER releasing it? What happens if you dont set it to nil?</p>
  
  <p>Q4) Is there really a difference between nil and NULL, or is it just a semantic thing to help the reader/developer know the object type just by glancing at it?</p>
  
  <p>Q5) Using properties REQUIRE the use of the 'Self' pointer?</p>
  
  <p>Q6) Using instance variables requires that the 'Self' pointer is NOT used?</p>
  
  <p>Q7) When would I ever want to use an instance variable instead of its property? I'd imagine value type data members are okay since their is not releasing and retaining involved.</p>
  
  <p>Q8) Is it necessary to call an object's dealloc from within the dealloc function?
  In many examples I have seen Release being called, but not Dealloc - are such tutorials incorrect?</p>