iphone - 跳过成员变量的“self”关键字会使程序崩溃

标签 iphone objective-c ios cocoa-touch

在下面的代码中:

- (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/

相关文章:

iPhone:没有名称或路径为 'iphoneos3.0'的SDK

ios - 什么可以是用户帐户的唯一标识符?

iphone - 将 iPod 库中的 mp3 音频文件上传到远程服务器

iphone - 仅更新到 iOS 8 后,旧版 iOS 7 应用程序是否仍可在 AppStore 中使用?

iphone - 越来越擅长为 Cocoa 编写代码?

objective-c - 如何在 OSX 中使用 Objective C 获取所有已安装的应用程序

iphone - 从 AppDelegate 将 NSMutableArray 添加到第二个选项卡中的 TableView

iphone - 如果我撤销我的开发者和分发,它会影响我的 Live 应用程序吗?

ios - 如何更改谷歌地图 SDK iOS 上动态标记的坐标?

ios - 转换标签栏 Controller 的导航 Controller 的可见 View Controller