Iphone 目标-C-使用ARC分配/初始化对象

Iphone 目标-C-使用ARC分配/初始化对象,iphone,objective-c,ios,memory-management,automatic-ref-counting,Iphone,Objective C,Ios,Memory Management,Automatic Ref Counting,我想知道我现在是否可以直接alloc,init一个ivar和ARC(因为如果我记得很清楚的话,没有ARC是不可能的,因为它会泄漏内存no) 示例(考虑这样声明的ivar): 然后呢 self.myArray = [[NSArray alloc] initWithObjects:object1, object2, nil]; //I know I could directly use [NSArray arrayWithObjects:...] but that's the purpose of

我想知道我现在是否可以直接alloc,init一个ivar和ARC(因为如果我记得很清楚的话,没有ARC是不可能的,因为它会泄漏内存no)

示例(考虑这样声明的ivar):

然后呢

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

如果您没有在
dealloc
方法中释放它,它会。在ARC中,您负责分配。在
dealloc
方法中,使用ARC,您仍然可以使用
self.ivar=nil
释放资源(但ARC已经自动为您这样做了),但不使用单词
release
explicit。此外,ARC不允许您调用
[super dealloc]

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

self.myArray = [[[NSArray alloc] initWithObjects:foo, bar, nil] autorelease];
对于ARC,编译器将负责为您添加它,因此您现在可以说:

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

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


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

这是不正确的。当然,您可以在ARC代码中使用
alloc
,但不能使用
retain
release
autorelease
。此外,ARC所做的不仅仅是将所有东西都放在自动释放池中;它分析您的代码以确定每个引用的生命周期,并插入对内存管理方法的适当调用。我同意不能使用retain,但我已经提到生命周期保持不变。读第二行和第三行是的,但你们第一行写道:“你们仍然可以分配和保留。”。正如我所指出的,以“电弧所做的一切…”开头的句子充其量只是误导。我欣赏你的观察,所以我对你的评论投了赞成票
self.myArray = [[NSArray alloc] initWithObjects:foo, bar, nil];