は、私は最近、Xcodeの4.3.2にアップデートして、私は今とても似@implementation
ブロック内のプライベートインスタンス変数を宣言することができることを発見しました:Objective-Cでプライベートインスタンス変数を定義する新しい方法ですか?
@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行の "It's working"メッセージでクラッシュします)。
これはプライベートインスタンス変数を宣言するためのObjective-Cの新機能ですか?私はこれを偶然発見したので、プライベートインスタンス変数を宣言するだけであるか、気づいていない副作用があるかどうかを知りたいですか?
private
というようなタイプの質問のほとんどが、異なる私的な拡張カテゴリでそれらを宣言する方法についての回答に終わったため、関連するドキュメントが見つかりませんでした。
私は、これがどのようにボンネットの下で行われているのか、より興味があります。ヘッダーに不完全な定義がある場合、Objective-Cランタイムはクラスに割り当てるメモリの量をどのように知っていますか? – mpontillo
それは投稿するのが大変な質問です。それはほぼ確実に["非脆弱なイナール"(http://www.sealiesoftware.com/blog/archive/2009/01/27/objc_explain_Non-fragile_ivars.html)と関係があります。 –
参考までに、あなたの答えのリンクが壊れているようです。 –