在我的应用中,我在h文件中定义了一些属性。
据我了解,如果有一个属性在m文件中的某个位置获得“alloc”,我应该在dealloc方法中释放它(或之前如果它不再相关)。
我不清楚没有得到“alloc”的属性:
我不介意阅读另一个教程(在大多数情况下,当我询问有关内存管理的问题时,我会让人们向我发送Apple内存管理指南的链接),但是如果有人可以解释它或者可以指向比苹果提出的更多的vivide / clear教程我会非常感激。
答案 0 :(得分:1)
@"some string"
是autoreleased
。别担心这些。当您将其传递给对象时,如viewController.title = @"some string";
,该字符串将由另一个对象保留和管理。
有两种方法可以创建NSSet
,NSArray
或NSDictionary
。
您可以使用alloc
和init
,也可以稍后使用release
,或使用返回+arrayWith...
对象的autoreleased
方法。
不要担心原始数据类型,例如BOOL
或int
s。
retain
值为强属性的属性,基本上它们确保对象保留在内存中,直到它们再次release
为止。你大多使用retain
来表示任何类型的对象,但要注意retain cycles!
答案 1 :(得分:1)
这个问题有很多答案,正如你所说,你已经阅读了内存管理教程,但我想你正在寻找的是一个很好的例子,让你清楚地了解它。
我读过的关于Cocoa内存管理的最有用的解释是在Hillegass的书(Mac OS X的Cocoa Programming)中,他将对象描述为像狗一样。每当您使用其中一种方法来增加保留计数(new
,copy
,retain
,init
时,我一定会忘记一些,这些都在你已经读过的记忆管理指南)然后你又将另一个领先优势放在狗的脖子上。
我现在将这个非常好的比喻用于愚蠢的极端。你问了一个生动的例子!
完成后,您必须从狗身上带走任何 导联。否则你会像在National Lampoon's Vacation上那样把它绑在你的车上,这不是很好 - 这是一个内存泄漏。
如果你没有对狗进行过攻击,你无法保证它会在你想要它的时候出现。这可能是向已发布的对象发送消息。
如果你从狗身上取下头,而且它上面没有任何线索,那么当你过度释放时,那只狗可能会非常野蛮。
所以,从本质上说,如果你在狗身上取得领先,就必须把它脱掉。如果你还没有(即你没有调用new
或retain
等),那么你就没有。这适用于所有对象。 BOOL
和int
不是对象,因此您不必担心它们。
在我的日常编程活动中没有狗受伤