设置属性是否与释放属性相同?

NSE*_*rer 4 iphone memory-management objective-c ios

有什么区别

self.myObject = nil;
Run Code Online (Sandbox Code Playgroud)

[myObject release];
Run Code Online (Sandbox Code Playgroud)

另外,为什么前者通常在viewDidUnload方法中使用,后者在dealloc方法中使用?

Joh*_*eek 8

假设一个retain属性,那么:

self.myObject = nil;
Run Code Online (Sandbox Code Playgroud)

将释放对象并将属性的值设置为nil.它也将通过setter方法执行此操作,可能会触发KVO通知.还有这个:

[myObject release];
Run Code Online (Sandbox Code Playgroud)

释放对象,在属性中留下悬空指针.

后者通常用于-dealloc因为您在释放对象后不关心变量的值,还因为您不希望从正在销毁的对象触发KVO通知.前者几乎用在其他任何地方.