在下面的代码中:
- (void)viewDidLoad {
NSArray *array = [[NSArray alloc] initWithObjects: @"Browny", @"Andy", @"Chiki", @"Gillu",
@"SnowLeopard", @"Lion", @"Tiger", @"SiberianTiger", nil ];
self.pickerData = array;
[array release];
}
如果我将上面的
self.pickerData
更改为pickerData
,该程序将因EXC_BAD_ACCESS signal received
崩溃。我认为使用关键字
self
的对象的成员变量/属性是可选的吗?有什么提示,即使
self
是该类的成员变量,为什么还要在这里使用pickerData
?
最佳答案
将其包装在一个答案中,而不是点缀在其他答案中。
您打电话的时候
self.pickerData = array;
这被编译为
[self setPickerData:array];
如果您使用
@sythesize
pickerData
,则实现将执行以下操作:- (void)setPickerData:(NSArray *)_pickerData;
{
if (pickerData != _pickerData) {
[pickerData release];
pickerData = [_pickerData retain];
}
}
因此,区别在于
self.pickerData = array
将通过将执行正确内存管理的设置程序,而pickerData = array
直接分配该值。
关于iphone - 跳过成员变量的“self”关键字会使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371062/