我最近更新到 Xcode 4.3.2,发现我现在可以在@implementation
块内声明私有实例变量,如下所示:
@interface TestClass : NSObject
@property (nonatomic, copy) NSString *testProp;
@end
@implementation TestClass {
NSString *_testPropStore;
}
- (NSString *)testProp { return _testPropStore; }
- (void)setTestProp:(NSString *)testProp { _testPropStore = [testProp copy]; }
- (id)init {
if (self = [super init]) {
_testPropStore = nil;
}
return self;
}
@end
注意大括号块NSString *_testPropStore
内的行。@implementation
我还使用以下代码进行了测试:
TestClass *c1 = [[TestClass alloc] init];
TestClass *c2 = [[TestClass alloc] init];
c1.testProp = @"Hello";
c2.testProp = @"World";
NSAssert(c1.testProp == c2.testProp, @"It's working!");
这似乎工作正常。(也就是说,应用程序崩溃并在 NSAssert 行显示“它正在运行”消息。)
那么这是 Objective-C 的一个新特性,用于声明私有实例变量吗?由于我偶然发现了这一点,我很想知道它是否只是用于声明私有实例变量,还是会有任何我不知道的副作用?
我找不到任何相关文档,因为大多数此类带有单词的问题private
最终都得到了有关如何在不同的私有扩展类别上声明它们的答案。