1 iphone cocoa-touch objective-c ios
在下面的代码中:
- (void)viewDidLoad {
NSArray *array = [[NSArray alloc] initWithObjects: @"Browny", @"Andy", @"Chiki", @"Gillu",
@"SnowLeopard", @"Lion", @"Tiger", @"SiberianTiger", nil ];
self.pickerData = array;
[array release];
}
Run Code Online (Sandbox Code Playgroud)
如果我在上面self.pickerData改为pickerData,程序会崩溃EXC_BAD_ACCESS signal received.
我想对于使用关键字的对象的成员变量/属性self是可选的吗?任何提示,为什么我需要self这里,即使pickerData是类的成员变量?
将其包装在一个答案中,而不是点缀其他答案.
你打电话的时候
self.pickerData = array;
Run Code Online (Sandbox Code Playgroud)
这是编译为
[self setPickerData:array];
Run Code Online (Sandbox Code Playgroud)
如果您@sythesize pickerData的实现将执行类似于以下操作:
- (void)setPickerData:(NSArray *)_pickerData;
{
if (pickerData != _pickerData) {
[pickerData release];
pickerData = [_pickerData retain];
}
}
Run Code Online (Sandbox Code Playgroud)
所以区别在于,self.pickerData = array将通过将执行正确内存管理的setter,而pickerData = array直接分配值.
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |