nil和release的问题?

Chr*_*ina 0 iphone xcode release objective-c nsarray

我正在使用名为allAvailableServices的 NSArray .首先我初始化它,写完[allAvailableServices release]; 之后我检查了条件if(allAvailableServices).它是真实的!我可能知道原因. 然后我写了 allAvailableServices = nil;[allAvailableServices release]; 上面的代码后,如果(allAvailableServices) 来到false.is有我写的任何问题[allAvailableServices release];后,allAvailableServices = nil;

每当allAvailableServices = nil我需要分配新的array.so如果我没有打电话[allAvailableServices release];我认为有一个内存问题.我是否正确?任何人都可以为我提供最好的处理方式吗?

Abi*_*ern 7

Release只是回收内存,但指针值没有改变; 它仍然包含一个值,但它指向垃圾.

这就是为什么很多人在释放它之后会把它们的指针弄为:

[allAvailableServices release], allAvailableServices = nil;
Run Code Online (Sandbox Code Playgroud)

在Objective-C中,将消息发送到nil是安全的,但是向已释放的对象发送消息可能会导致应用程序崩溃(通常使用EXC_BAD_ACCESS)

请注意,我在将对象设置为nil之前已经释放了该对象.如果你反过来这样做,你已经丢失了发送消息的指针,所以你泄漏了对象.