向 NSMutablearray 添加了一个对象并发布
Posted
技术标签:
【中文标题】向 NSMutablearray 添加了一个对象并发布【英文标题】:Added an object to NSMutable array and released 【发布时间】:2011-10-05 13:27:54 【问题描述】:在我的项目中,从数据库读取的数据分配给分配的对象。在对象被添加到 NSMutableArray 之后。然后释放对象。这样做有什么问题吗? 我的源代码:
while (sqlite3_step(statement) == SQLITE_ROW)
TopicEntry *temp = [[TopicEntry alloc] init];
ruleName = (char *)sqlite3_column_text(statement, 2);
[temp setTopicName:(ruleName) ?[NSString stringWithUTF8String:ruleName] :@""];
[temp setParentID:(int)sqlite3_column_int(statement, 2)];
[rules addObject:temp];
[temp release];
【问题讨论】:
【参考方案1】:你的代码没问题。
您唯一需要考虑的是,当您拥有一个对象时,您需要释放它。调用init
方法会让你拥有它,所以根据策略你必须释放它,不管你用它做什么。您可以阅读有关政策的所有信息here。
此外,NSMutableArray
将保留通过addObject
传递给它的对象。但这不是您应该考虑的方式,并且可以被视为实现细节。重要的是所有权政策。
【讨论】:
我有疑问,请帮助我。如果我这样写: TopicEntry *t = [TopicEntry alloc] init]; t = [主题 objectAtIndex:0]; //做了一些事情 [t release];这段代码是否会释放 NSMutableArray 中的实际对象?请帮忙,我是这个领域的新手【参考方案2】:不,就内存分配而言,您的代码看起来不错。
【讨论】:
【参考方案3】:我说那是完全正确的做法。 rules
将在添加时保留临时对象,并在释放时释放它(或删除对象)。
【讨论】:
以上是关于向 NSMutablearray 添加了一个对象并发布的主要内容,如果未能解决你的问题,请参考以下文章
从 URL 将对象添加到 NSMutableArray 的更快方法