+3  A: 

Yes, it is safe to call release against an NSThread if you are done with it. In non-GC Objective C code the idiom is that once you are done accessing an object you may release it. If anything else needs that object, including the object itself it their job to have a retain against it. In general if an object cannot be safely disposed at arbitrary times it will retain itself while it is in an unsafe state, and release itself when it can be safely disposed of.

This is how things like NSThread and NSURLConnection work (NSURLConnection actually retains its delegate and does a lot of fancy stuff to cope with the retain loop that occurs.

Louis Gerbarg
Just because you are "done with it" doesn't mean the thread is altogether finished executing. Calling `cancel` on a thread doesn't guarantee you can release it right away.
Tim
Yes, but while it is executing it retains itself.
Louis Gerbarg
@Louis: You're correct - sorry, didn't quite read the docs closely enough. Disregard my last comment.
Tim
No problem, threading and retain semantics are tricky things. There also used to be some really nasty bugs and gotchas that made everything a lot more complicated than the docs would imply.
Louis Gerbarg