Objective-C - 使用ARC分配/初始化对象

时间:2012-05-11 13:53:28

标签: iphone objective-c ios memory-management automatic-ref-counting

我想知道我是否可以直接分配,现在用ARC启动一个ivar(因为如果我记得很清楚,没有ARC就不可能因为它会泄漏内存而没有)?

示例(考虑如此声明的ivar):

@property (nonatomic, strong) NSArray *myArray;

@synthetize myArray = _myArray;

然后再做

self.myArray = [[NSArray alloc] initWithObjects:object1, object2, nil]; //I know I could directly use [NSArray arrayWithObjects:...] but that's the purpose of my question 

3 个答案:

答案 0 :(得分:3)

使用alloc / initWithObjects:arrayWithObjects:之间的唯一区别是前者留下了一个保留对象,而第二个则没有。如果由于某种原因您想使用前者初始化属性,您需要添加对autorelease的调用以避免泄漏。所以你要这样做:

self.myArray = [[[NSArray alloc] initWithObjects:foo, bar, nil] autorelease];

你是正确的,使用ARC,编译器会负责为你添加,所以你现在可以说:

self.myArray = [[NSArray alloc] initWithObjects:foo, bar, nil];

答案 1 :(得分:0)

如果您没有在dealloc方法上发布它,那就可以了。使用ARC,您负责分配。在使用ARC的dealloc方法中,您仍然可以使用self.ivar=nil释放资源(但ARC已经自动为您执行此操作),但未使用明确的release一词。此外,ARC不允许您拨打[super dealloc]

答案 2 :(得分:-1)

您仍然可以分配和保留。对象生命周期保持不变,即当reatin计数降至0时,对象会释放。所有ARC为你做的就是将对象放在自动释放池中并正确地释放它,你应该在那里完成。你仍然可以覆盖dealloc。

你可以找到关于ARC here

的好文章