Iqb*_*han 1 cocoa-touch memory-management objective-c ios
今天我看到用户首先释放对象的代码,然后他将该对象设为零.像这样
[objectA release];
objectA=nil;
Run Code Online (Sandbox Code Playgroud)
我在很多书中读过,我们应该在保留视图的同时使对象为零并稍后释放对象(当然,在dealloc方法中,此方法在viewWillDisappear或viewDidDisappear之后调用).
现在我想知道哪种方法更好?
设置nil和释放是两个不同的操作.
你release是一个放弃它的所有权的对象.标准内存管理指南中对此进行了介绍.如果您不熟悉它们,则应在进行任何进一步的iOS编程之前阅读它们.
释放对象后,nil如果您知道某些其他代码稍后可能尝试访问该变量,则应将其设置为.这在实例变量中最常见.
例如,您可以使用实例变量来存储某种缓存:
- (NSArray *)items
{
if (!cachedItems) {
cachedItems = [[self calculateItems] retain];
}
return cachedItems;
}
Run Code Online (Sandbox Code Playgroud)
稍后您可能需要清除此缓存:
- (void)invalidateCache
{
[cachedItems release];
cachedItems = nil;
}
Run Code Online (Sandbox Code Playgroud)
我们需要将cachedItems设置为nil,因为我们的items方法可能会在以后尝试使用它.如果我们不将其设置为nil,则发送到(现在已发布)缓存的消息可能会导致崩溃.
所以在释放它之后将变量设置为nil,以便稍后可以通过类中的其他方法访问它.
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |