iphone - objective-C 中的私有(private)和公共(public)属性

标签 iphone objective-c ios ipad

那么这两个版本之间的实际区别是什么:

@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

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

@private
@property(nonatomic, retain) NSArray *baz;
@end

就我的理解而言,将@property 放在.m 中基本上意味着它是私有(private)的。如果我错了,请纠正我?那么哪个是最好的实现呢?它只是一种编码风格/实践吗?

最佳答案

编译器可以就它知道的事情向您发出警告。

当我导入您的 header 时,编译器可以看到 Foo 有一个名为 barsetBar: 的方法。这意味着我可以同时使用它们

[instanceOfFoo setBar:@"some string"];

NSLog(@"%@", [instanceOfFoo bar]);

而因为我只导入了 header - 编译器只能看到 header ,它不知道还有方法 bazsetBaz: 可用,所以这样做以下将导致编译器 barf

[instanceOfFoo setBaz:@"some string"];

NSLog(@"%@", [instanceOfFoo baz]);

但是,如果我知道这些属性存在,我仍然可以通过像这样使用 KVC 而无需编译器 barfing 来访问这些属性

[instanceOfFoo setValue:@"some string" forKey:@"baz"];

NSLog(@"%@", [instanceOfFoo valueForKey:@"baz"]);

关于iphone - objective-C 中的私有(private)和公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10746076/

相关文章:

iphone - 按比例缩放整个 UIView

ios - 从 super View 转换点时委托(delegate)不工作

ios - 4.4 和 5.5 英寸的 UICollectionViewCell 动态尺寸调整

iphone - 如何将图像放到 iPad 模拟器上

iphone - 如何检查 iOS 设备是否为视网膜显示屏 iPod touch?

iphone - 我想在后台运行几分钟后终止该应用程序

ios - RestKit+CoreData+MagicalRecord : how not to persist managed objects

iphone - 使 UIPopoverController 在外部触摸时不辞职?

objective-c - 使用现有的 UINavigationController 在 UIPopoverController 中显示 UIImagePickerController(添加后退按钮)

java - 如何使用 java 发送 MDM DeviceLock 命令