那么这两个版本之间的实际区别是什么:
@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
有一个名为 bar
和 setBar:
的方法。这意味着我可以同时使用它们
[instanceOfFoo setBar:@"some string"];
NSLog(@"%@", [instanceOfFoo bar]);
而因为我只导入了 header - 编译器只能看到 header ,它不知道还有方法 baz
和 setBaz:
可用,所以这样做以下将导致编译器 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/