1

我想知道我是否可以直接分配,现在用 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 
4

3 回答 3

3

是的。

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

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

你是对的,使用 ARC,编译器会为你添加它,所以你现在可以说:

self.myArray = [[NSArray alloc] initWithObjects:foo, bar, nil];
于 2012-05-11T14:01:51.633 回答
0

如果你没有在你的dealloc方法中释放它,它会的。使用 ARC,您负责分配。在该dealloc方法中,使用 ARC,您仍然可以使用self.ivar=nil(但 ARC 已经为您自动执行此操作)释放资源,但不使用release显式一词。此外,ARC 不允许您调用[super dealloc].

于 2012-05-11T13:59:39.540 回答
-1

您仍然可以分配和保留。对象生命周期保持不变,即当 reatin 计数下降到 0 时对象得到释放。ARC 为您所做的只是将对象放入自动释放池并正确释放它,这是您应该做的。您仍然可以覆盖 dealloc。

你可以在这里找到关于 ARC 的好文章

于 2012-05-11T14:10:39.357 回答