現代のランタイムでは。次のようなインターフェイスでivarがすでに宣言されていなくても、プロパティを宣言できます。
@interface MyClass: NSObject
{
NSString *str2;
}
@property (retain) NSString *str1;
@property (retain) NSString *str2;
@end
self.str1
そして、私は知っています、実装では、両方または純粋にアクセスできるので、これは自動的にstr1ivarを生成しますstr1
。
しかし、私の質問は、str1とstr2の間に違いはありますか?
それらが同じである場合、クラス拡張(名前のないカテゴリ)がivarを生成するが、クラス拡張にivarインスタンスを追加することを許可しない新しい宣言されたプロパティを追加できるのはなぜですか?(LLVM2.0以降では許可されています)これですが、gccはしません)