pse*_*bos 2 iphone cocoa-touch
在下面的一段代码中(来自一本书),数据是NSDictionary*数据; 在标题中定义(没有属性).
在控制器的viewDidLoad中,会发生以下情况:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *keys = [NSArray arrayWithObjects:@"home", @"work", nil];
NSArray *homeDVDs = [NSArray arrayWithObjects:@"Thomas the Builder", nil];
NSArray *workDVDs = [NSArray arrayWithObjects:@"Intro to Blender", nil];
NSArray *values = [NSArray arrayWithObjects:homeDVDs, workDVDs, nil];
data = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
}
Run Code Online (Sandbox Code Playgroud)
由于我对Objective-c真的很新,有人可以向我解释为什么在退出函数之前我不必保留变量键,homeDVD,workDVD和值?我希望之前的数据分配类似于:
[keys retain];
[homeDVDs retain];
[workDVDs retain];
[values retain];
Run Code Online (Sandbox Code Playgroud)
或不?InitWithObjects是否(递归地)将所有对象复制到新表中?
假设我们没有最后一行(数据分配),我们应该释放所有NSArrays退出函数之前(或者我们可以安全地假定所有NSArrays将被自动释放,因为没有页头为每一个?)
谢谢!!!!
在Core Foundation中,大多数对诸如arrayWithObjects之类的方法的静态调用都返回自动释放的实例,这意味着您不需要(甚至不能!)自己释放它.
因此,执行代码后的情况是,使用arrayWithObjects:调用创建的所有数组都是自动释放的,但在添加到其他数组或字典时会保留.因此,在添加到values数组时,homeDVD和workDVD将被保留,并且在添加到数据字典时,键和值数组都会被保留.
因此,您不需要显式释放数组,但是您需要在某个时刻发布数据字典(可能在dealloc方法实现中).
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |