我正在学习objectiveig和编程一个iPad应用程序。内存管理是我不断重复并不得不重新阅读的一件事。我到达那里......慢慢地。基本规则如每alloc
/retain
你必须有release
是有用的。然而,一个比较基本的东西躲开我,我不知道是否有人能解释...了解ios中的内存管理
看看下面的代码...
NSArray *myArray = [[NSArray alloc] init];
myArray = [someNSSet allObjects];
这是相对简单的编码,并且将需要[myArray release]
声明。
不过,我一直看到的例子(实际上,我已经广泛以下“捷径”用...
NSArray *myArray = (NSArray *)[someNSSet allObjects];
如何,据我了解,当你使用你不要的(NSString *)
需要使用[myArray release]
声明,但我不明白为什么。
可能有人可能解释?
为什么我不拥有返回的值。谁/什么? – 2012-02-26 18:35:29
@BenThompson:当你创建一个对象(new或alloc,copy或mutableCopy)时,它的保留计数为1,并且你拥有它。 当你发送一个对象一个保留消息时,它的保留计数增加1,你也拥有它。您只需要释放您拥有的对象。 – 2012-02-26 18:39:28
@Ben:最有可能的是autorelease池是从'allObjects'返回的对象的所有者。另一种可能性是set对象,但这只会在集合暴露一个已经拥有的对象时才会发生,而不是创建一个新的数组。但是,除了了解背景中发生的事情外,你不应该关心谁拥有事物。无论你做或不做,这都是你需要考虑的。 – 2012-02-26 18:48:55