xon*_*rlz 3 iphone objective-c ipad ios
那么这两个版本之间究竟有什么区别:
@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
Run Code Online (Sandbox Code Playgroud)
和
@interface Foo : NSObject
// A guy walks into a bar.
@public
@property(nonatomic, copy) NSString *bar;
@private
@property(nonatomic, retain) NSArray *baz;
@end
Run Code Online (Sandbox Code Playgroud)
就我的理解而言,将@property放在.m中基本上意味着它是私有的.如果我错了,请纠正我?那么哪个是最好的实现呢?它只是一种编码风格/实践吗?
编译器可以警告您了解它所知道的事情.
当我导入头时,编译器可以看到Foo
有一个名为bar
and 的方法setBar:
.这意味着我可以同时使用它们
[instanceOfFoo setBar:@"some string"];
NSLog(@"%@", [instanceOfFoo bar]);
Run Code Online (Sandbox Code Playgroud)
而因为我只导入了标题 - 编译器只能看到标题,它不知道还有方法baz
和setBaz:
可用,所以这样做会导致编译器barf
[instanceOfFoo setBaz:@"some string"];
NSLog(@"%@", [instanceOfFoo baz]);
Run Code Online (Sandbox Code Playgroud)
但是,如果我知道它们存在,那么我仍然可以访问这些属性,而不使用编译器barfing就可以使用这样的KVC
[instanceOfFoo setValue:@"some string" forKey:@"baz"];
NSLog(@"%@", [instanceOfFoo valueForKey:@"baz"]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7506 次 |
最近记录: |