【发布时间】:2011-01-08 00:15:39
【问题描述】:
eventPoints = [[NSMutableArray array] retain];
“retain”关键字与“array”一起做什么? “数组”没有在任何地方定义。
eventPoints 也被声明为 NSMutableArray。
我只是想学习。谢谢
【问题讨论】:
标签: objective-c memory-management
eventPoints = [[NSMutableArray array] retain];
“retain”关键字与“array”一起做什么? “数组”没有在任何地方定义。
eventPoints 也被声明为 NSMutableArray。
我只是想学习。谢谢
【问题讨论】:
标签: objective-c memory-management
看看我问的这个问题:iPhone memory management (with specific examples/questions)
我也花了一段时间才掌握了这个窍门。希望这会有所帮助!
编辑:至于[NSMutableArray array] 的作用,根据NSArray 上的文档,它这样做:“创建并返回一个空数组。”并且被NSArray 的可变子类使用,例如NSMutableArray。基本上,它和做的一样:[[[NSMutableArray alloc] init] autorelease](或类似的东西)。因为是autoreleased,所以需要在上面调用retain来保留变量。
【讨论】:
1) “保留”关键字与“数组”一起做什么?
如您所知,objective-C 使用引用计数进行内存管理。 “保留”每增加 1 个点。
2) “数组”没有在任何地方定义。
“数组”在 NSArray 中定义。 NSMutableArray 是 NSArray 的子类,因此 NSMutableArray 可以使用 NSArray 中定义的函数。 “array”是一个类方法,它创建并返回一个空数组。
在objective-c中有四种显式加1的方法:alloc、copy、retain、actain 因为您创建了一个空数组而不使用任何这些,所以您通过“保留”手动增加 1。所以在未来,你可能需要 [everyPoints release] 减 1 来释放它。
【讨论】: