ios - ARC 中的 Objective-C 命名约定

标签 ios iphone objective-c automatic-ref-counting naming-conventions

我最近在 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/

相关文章:

ios - 是否可以在 Core Data 中以只读方式返回 NSManagedObjects?

ios - MKAnnotationView 自定义标注对辅助功能(VoiceOver)不可见

iphone - 选项卡按钮中的 UIAlertView - 无互联网连接

iphone - UIImage上的TapGestureRecgonizer在 Storyboard 设置中不起作用

ios - : "Property type "JSQMessagesCollectionView"is incompatible with type "UICollectionView",继承自 "UICollectionViewLayout"是什么意思

Objective-C 的 "obj performSelector"vs objc_msgSend( )?

ios - MKCircleRenderer 填充颜色重叠问题

iphone - iOS-发布到Facebook ...图标是这个吗?

iphone - 谷歌分析不工作 iOS

iphone - 创建登录屏幕以链接到 iOS 应用程序中的表单