我正在使用名为 allAvailableServices 的NSArray。
首先我初始化它并在写完[allAvailableServices release];
之后
然后我检查了条件 if(allAvailableServices)。
它是真的!我可能知道原因。
然后我写道
allAvailableServices = nil;
和[allAvailableServices release];
在上面的代码 if(allAvailableServices)之后出现错误。我在[allAvailableServices release];
allAvailableServices = nil;
的任何问题
每当allAvailableServices = nil
我需要分配新的数组。如果我没有调用[allAvailableServices release];
我认为存在内存问题。我是否正确?
任何人都可以为我提供最好的处理方式吗?
答案 0 :(得分:7)
Release只是回收内存,但指针值没有改变;它仍然包含一个值,但它指向垃圾。
这就是为什么许多人在释放它之后会把它们的指针弄错:
[allAvailableServices release], allAvailableServices = nil;
在Objective-C中,将消息发送到nil是安全的,但是向已发布的对象发送消息可能会导致应用程序崩溃(通常使用EXC_BAD_ACCESS)
注意,我在将对象设置为nil之前已经释放了该对象。如果你反过来这样做,你已经丢失了发送消息的指针,所以你泄漏了对象。
答案 1 :(得分:1)
如果使用访问器,则可以直接将值设置为nil,它会调用release并将它们设置为nil。释放将引用计数递减1,如果它达到0,则释放对象。
如果你没有设置为nil,那么内存仍然有一些值,因此你的if条件会出现问题。
更清洁的方法是使用访问者并调用self.yourvariable = nil;
。