Objective-C 编码指南

标签 objective-c ios cocoa-touch

所以在指南中说:

For code that will run on iOS only, use of automatically synthesized instance variables is preferred.

When synthesizing the instance variable, use @synthesize var = var_; as this prevents accidentally calling var = blah; when self.var = blah; is intended.

 // Header file
@interface Foo : NSObject
// A guy walks into a bar.
@property(nonatomic, copy) NSString *bar;
@end

// Implementation file
@interface Foo ()
@property(nonatomic, retain) NSArray *baz;
@end

@implementation Foo
@synthesize bar = bar_;
@synthesize baz = baz_;
@end

问题是,这仅适用于公共(public)变量还是也适用于私有(private)变量?文档中并不清楚,但想对为什么“如果”这仅适用于公共(public)或私有(private)有一些想法或观点?我认为这对所有公共(public)/私有(private)都有意义,这样您就不会弄乱 ivars 和使用该属性

最佳答案

我认为所讨论的变量是公共(public)变量还是私有(private)变量并不特别重要。当您直接访问变量而不是使用生成的访问器方法时,以不同的名称进行综合的做法使它变得明确。

也许您要问的问题背后有一个不同的问题:我通常应该通过访问器还是直接访问私有(private) ivar?我认为大多数熟练的 iOS 开发人员都倾向于使用访问器,除非有某些特殊原因不要(性能,避免 KVO 等副作用)。这样做更具前瞻性,并允许在底层实现中具有灵 active 。以非常小的方式,您是针对接口(interface)而不是实现进行编码。

还可能值得指出的是,Clang 的默认行为在未来将发生变化,因此属性支持的 ivars 被合成为名为 _foo 默认。显然,当权者考虑将强调 ivars 视为最佳实践。

关于Objective-C 编码指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745657/

相关文章:

ios - 如何唯一识别ios设备

ios - 为什么不搜索解析数据库?

ios - 重新排序 CollectionView 单元格 iOS 11

iphone - 如何在 iPhone (iOS) 上检测硬件键盘上的键盘事件

ios - 将 UIView 透视变换与其他 CATranform3D 相结合

ios - Cocos2d,使用大于和小于整数值的限制来显示 Sprite

ios - 如何使用 UIView 创建自定义翻转动画

objective-c - OS X 上的 AVPlayer 错误

ios - Split View MasterView 未显示在弹出窗口中但滑入

cocoa-touch - 切换旋转 View 时,iOS 应用程序在打开时崩溃