私はいくつかのサンプルコードを見ていますが、私は特定のivarの宣言が不足していることに困惑しています。誰かが私には、この優れたを理解するのに役立ちます願って:インスタンス変数ivarを宣言せずに合成で使用することは可能でしょうか?
typedef NSUInteger (^NumberOfItemsInSection)(ViewClass *viewClass, NSUInteger section);
// class declaration
@interface SampleScrollView : UIScrollView
@property (nonatomic, copy) NumberOfItemsInSection itemsSectionBlock;
@end
// class implementation
@implementation SampleScrollView
@synthesize itemsSectionBlock = _itemsSectionBlock;
- (void)setItemsSectionBlock:(NumberOfItemsInSection)itemsSectionBlock
{
// _itemsSectionBlock is not declared any where in the class
// How does the compiler not complain?
_itemsSectionBlock = [itemsSectionBlock copy];
[self reloadData];
}
@end
を、「_itemsSectionBlock」、任意の場所を宣言されていないと、それだけで、プロパティのセッターのオーバーライドに使用することができます。それはどのように機能するのですか?
純粋なプライベートメンバーを定義することができますか? iVarをこの腕輪を使って永遠に忘れることができますか? – Oliver
これらのiVarsがKVC/KVOに準拠していると思わない限り、 '@ private'宣言を使用して、常にプライベートプライベートメンバーを持つことができます。 setterとgetterを宣言するとすぐにメソッドを使用してアクセスでき、Objective-Cにはprivateメソッドの概念はありません。そして、はい、ほとんどの場合、私のクラスでiVarsを宣言しました。 – Abizern
ゲッターとセッターはプライベートインターフェイス(.m)で宣言し、外部からプライベートにすることができます。そして、KVC/KVOの制限の問題はもうありません。 – Oliver