Mar*_*ith 14 iphone cocoa objective-c
我想为我的实例变量使用属性,但在很多情况下,我只希望类本身可以访问setter.我希望我能做到这样的事情:
foo.h中:
@interface Foo {
NSString *bar;
}
@property (readonly) NSString *bar;
@end
Run Code Online (Sandbox Code Playgroud)
Foo.m:
#import "Foo.h"
@interface Foo ()
@property (copy) NSString *bar;
@end
@implementation Foo
@synthesize bar;
@end
Run Code Online (Sandbox Code Playgroud)
但这会产生一个警告:
Foo.m:4: warning: property ‘bar’ attribute in ‘Foo’ class continuation does not match class ‘Foo’ property
Run Code Online (Sandbox Code Playgroud)
我可以看到它在抱怨什么,但它似乎仍然是一个有用的习语.有没有其他方法可以在不写自己的二传手的情况下实现这一目标?
Bar*_*ark 31
您的方法是正确的,但@property bar类扩展中的重新声明必须与原始声明匹配,但readwrite与readonly除外.所以这将有效:
foo.h中
@interface Foo {
NSString *bar;
}
@property (copy,readonly) NSString *bar;
@end
Run Code Online (Sandbox Code Playgroud)
Foo.m:
#import "Foo.h"
@interface Foo ()
@property (copy,readwrite) NSString *bar;
@end
@implementation Foo
@synthesize bar;
@end
Run Code Online (Sandbox Code Playgroud)
(回想一下,默认是assign属性,而不是copy).
| 归档时间: |
|
| 查看次数: |
5630 次 |
| 最近记录: |