【问题标题】:why iphone crashes on direct field (not by getters/setters) acces为什么 iphone 在直接字段(不是通过 getter/setter)访问时崩溃
【发布时间】:2011-09-06 12:02:10
【问题描述】:

[对不起我的英语不好]

如果我创建一些字符串的 NSArray (作为对象的成员字段 - 没有属性没有综合),

并在 -viewdidLoad 中用一些字符串初始化它

names = [NSArray arrayWithObjects: @"jeden", @"dwa", @"trzy", nil];

并且立即(也在 -viewDidLoad 中)会使用它,没关系。

但是当我稍后在按钮事件处理程序中尝试使用它及其数据时, 它表明该数组数据已损坏(甚至在 [names count] 上崩溃;)

这表明我需要添加属性并通过 self.names 合成和使用它 然后它似乎起作用了……但这对我来说很困惑和悲伤,因为我确实这样做了 不知道第一种使用成员的原因是什么(没有自我。没有财产 和合成)不起作用

谁能解释一下,

TIA,冷杉

【问题讨论】:

  • 不需要添加@property,保留数组也可以...但是,当您访问当前对象的实体时,您必须使用self-self。
  • 好的,我现在明白我应该保留它或使用带有保留的属性(然后我必须使用 self.names= 或简单地初始化 names= 足以触发 setter 并使属性保留我? );但我不明白自我的需要。如果我只保留数组;需要我也使用 self.names,否则不是那么必要

标签: objective-c ios


【解决方案1】:
names = [NSArray arrayWithObjects: @"jeden", @"dwa", @"trzy", nil]; 

对对象进行自动释放引用,您需要任何一个(它们都将保留计数增加 1):

  • 保留对象,我的意思是:

    names = [[NSArray arrayWithObjects: @"jeden", @"dwa", @"trzy", nil] 保留];

  • 或使用它们的新分配,我更喜欢这种方法:

    names = [[NSArray alloc] initWithObjects: @"jeden", @"dwa", @"trzy", nil];

然后在dealloc部分不要忘记释放它,以避免内存泄漏。

干杯!

【讨论】:

    【解决方案2】:

    您应该正确初始化它以使其正确保留:

    names = [[NSArray alloc] initWithObjects:@"jeden", @"dwa", @"trzy", nil];
    

    【讨论】:

    • 我怀疑我的第一个版本可能会自动发布,但是否应该稍后发布 - 在销毁我的包含视图之后?
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多