3

我最近从iOS项目中的手动引用计数环境移动到ARC环境。ARC中的Objective-C命名惯例

所以我们可以说,我在我的手工引用计数环境的过去,下面的代码:

// Manual reference count environment (using "alloc" prefix as method returns a retained NSArray) 
- (NSArray *)allocMyArray { 
    NSArray *array = [[NSArray alloc] initWithObject:@"this is just a sample code"]; 

    return array; 
} 

我可以从allocMyArray全弧环境改变上面的方法名MYARRAY?

以下代码是否具有有效的命名约定,并且在ARC环境中也不会泄漏?

// ARC environment 
- (NSArray *)myArray { 
    NSArray *array = [[NSArray alloc] initWithObject:@"this is just a sample code"]; 

    return array; 
} 

在一般情况下,应该我曾经用“黄金”或“新”字头的方法在全弧环境或者是这个命名约定是没有意义的ARC环境和对编译器没有影响?

感谢, Yoash

+1

除非我误解,'allocMyArray'实际上并不是MRR下的常规约定。 'alloc'并不意味着“拥有引用”,而是“为对象分配内存”。 – Chuck

回答

2

如果您使用ARC,有没有那么多的alloc init和使用一个类的方法之间的差异。如果您不使用ARC,则差异非常重要。

alloc/init组合给你一个拥有的引用。这意味着你以后必须发布它。 classnameWithFoo变体返回一个非拥有的引用(自动释放)。你可能不会释放它。

这遵循通常的可可命名约定。除了以alloc,copy,mutableCopy和new开头的方法之外,所有方法都会返回非拥有(自动发布的)实例。这些返回拥有您必须发布的引用。

您为ARC环境建议的命名约定很好,并且代码不会泄漏。

该对象只会在运行循环结束时才会结束。

就像你返回一个alloc/inited对象一样,ARC会插入适当的释放调用,并且该对象将存在它的作用域。