我想知道我是否可以直接分配,现在用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
答案 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
的好文章