変数の設定はデフォルトでstrong
修飾子になっているため、ivarを設定すると、割り当てられているオブジェクトが保持されるようになったと理解しています。 ivarは宣言されたオブジェクトのスコープ内にあり、strong
は変数のスコープ内にオブジェクトを保持するため、これは、ivarを含むオブジェクトがまだ存続している間はivar値が解放されないことを意味します。
これは正しいです?
もしそうなら、メモリ管理の観点から、保持(強力な)プロパティと単純なivarの間に違いはもうないと思うのは正しいですか?
変数の場合:
次に、対応する@property
/@synthesize
のないivarとして宣言し、実装内で直接参照するのが適切です。クラス実装ファイルでこのivarを宣言することは、 Encapsulation とインラインです。
// MyClass.h
@interface MyClass : ParentClass
@end
// MyClass.m
@implementation MyClass {
NSString *myString;
}
- (void)myMethod {
myString = @"I'm setting my ivar directly";
}
@end
__strong
として扱われます。nil
に初期化され、プリミティブの場合は0
に初期化されます。[〜#〜] kvo [〜#〜] を使用して、ARCを使用する場合と非常によく似ていることを除いて、インスタンス変数を使用してカスタムのゲッターとセッターを実行することはできません。