我最近在 iOS 项目中从手动引用计数环境转移到 ARC 环境。
假设我在过去的手动引用计数环境中有以下代码:
// 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;
}
我可以在完整的 ARC 环境中将上述方法名称从 allocMyArray 更改为 myArray 吗?
以下代码是否具有有效的命名约定并且在 ARC 环境中也没有泄漏?
// ARC environment
- (NSArray *)myArray {
NSArray *array = [[NSArray alloc] initWithObject:@"this is just a sample code"];
return array;
}
一般来说,我应该在完整的 ARC 环境中使用“alloc”或“new”方法前缀,还是这种命名约定在 ARC 环境中毫无意义并且对编译器没有影响?
谢谢, 约阿什
最佳答案
如果您使用的是 ARC,alloc init 和使用类方法之间并没有太大区别。如果您不使用 ARC,则差异非常重要。
alloc/init 组合为您提供了拥有引用。这意味着您必须稍后发布它。 classnameWithFoo 变体返回一个非拥有引用(自动释放)。你可能不会释放它。
这遵循通常的 Cocoa 命名约定。除了以 alloc、copy、mutableCopy 和 new 开头的方法外,所有方法都返回非拥有(自动释放)实例。这些返回您必须释放的引用。
你建议的ARC环境的命名约定很好,代码不会泄露。
不过,该对象只会在运行循环结束之前存在。
如果您返回一个分配/初始化对象,ARC 将插入适当的释放调用,并且该对象将在其范围内存在。
关于ios - ARC 中的 Objective-C 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21475244/