【问题标题】:Iphone: Difference between these two assignmentIphone:这两个任务之间的区别
【发布时间】:2011-01-11 23:36:08
【问题描述】:

我的 .h 中有这段代码:

@property (nonatomic, retain) NSArray *arrayData;

有什么区别:

self.arrayData = [[NSArray alloc]initWithObjects:@"date",@"trip",nil];

和:

arrayData = [[NSArray alloc]initWithObjects:@"date",@"trip",nil];

我应该使用什么以及如何释放 arrayData 变量。

谢谢

【问题讨论】:

标签: iphone properties


【解决方案1】:

不同之处在于使用self.arrayData = ... 会保留数组。您应该使用self.arrayData = nil; 释放它。

您在此处拥有 拥有的代码不起作用,因为仅init 不会分配数组。你可以使用

self.arrayData = [NSArray arrayWithObjects:@"date",@"trip",nil];

分配和初始化数组。

ps arrayWithObjects 返回一个已分配和自动释放的对象。这意味着如果您不保留该对象,它将消失。所以使用self.arrayData = ... 这样做。

alloc/init/autorelease 的等价物是:

self.arrayData = [[[NSArray alloc] initWithObjects:....,nil] autorelease];

【讨论】:

  • [[NSArray alloc]initWithObjects:@"date",@"trip",nil];肯定会分配一个数组。
  • @StefanH:有人决定编辑并修复原始问题。 ;-)
  • 但是当我使用这个时:arrayData = [[NSArray alloc]initWithObjects:@"date",@"trip",nil];因为我调用了 alloc,所以我拥有该对象的所有权,不是吗?所以我也需要释放它。我不明白区别抱歉
  • 是的,正确的。这是一个完全有效的方法。 但是如果你再次这样做,原始对象将不会被释放(除非你主动调用[arrayData release])。如果你使用self.arrayData = ... 两次,第一个对象 被释放而你没有明确地这样做。这就是区别。
  • 最后一个问题。如果需要和空数组,这是正确的吗? self.dataSource = [[[NSMutableArray alloc] init] autorelease];谢谢
猜你喜欢
  • 2014-06-02
  • 2018-06-12
  • 2011-09-19
  • 1970-01-01
  • 2020-11-19
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多