是否应该发布(复制)@property? Apple的示例代码是否正确?

时间:2011-03-07 21:22:31

标签: cocoa ios memory-management

这个问题是指Apple的示例“TableSearch”项目,它实现了一个可搜索的表视图。相关的源代码可以在这里找到:

MainViewController.h

MainViewController.m

在此示例项目中,“MainViewController”类具有用于保存搜索词的属性:

@property (nonatomic, copy) NSString *savedSearchTerm;

但是dealloc没有发布“savedSearchTerm”:

- (void)dealloc
{
    [listContent release];
    [filteredListContent release];

    [super dealloc];
}

(示例代码不会在其他地方释放“savedSearchTerm”(尽管在某些情况下它在viewDidLoad中将其设置为nil))。

鉴于Apple的内存管理规则说你应该发布使用“alloc”,“new”或“copy”创建的对象,为什么不需要发布“savedSearchTerm”?

2 个答案:

答案 0 :(得分:2)

应该在-dealloc方法中发布。如果示例代码没有这样做,请在http://bugreport.apple.com提交错误并将其修复。

答案 1 :(得分:0)

我还没有看过这个示例,但正如您所描述的那样,需要释放saveSearchTerm。

通过

self.saveedSearchTerm = nil;

[savedSearchTerm release];

如果你只看到

savedSearchTerm = nil; 

然后这可能是内存泄漏,因为它只是将ivar设置为nil而不释放对象。