0

最近、私は iOS 開発のために obj-c を使用しており、クラス内の変数にアタッチできる "strong" プロパティに当惑しています。

1) 何よりもまず、実用的な意味で、「強い」とは正確に何をしますか?

2) いくつかの obj-c クラスを構築するときに、"strong" は通常 @property コンテキストで型指定されることに気付きました (つまり@property (strong) UIImage *pic1, *pic2;、プロパティ/合成セットアップで変数を宣言したくない場合、与えることは可能ですか?そのような変数は「強い」属性ですか?

4

2 に答える 2

2

強い参照は、オブジェクトの所有権を取得します。

強力なプロパティを設定すると、渡されたオブジェクトはプロパティの所有者によって保持されます。たとえば、 の[theViewController setString:aString];所有theViewController権を取得しaStringます。プロパティが別の値に設定されると、そのオブジェクトは解放されます。

所有権修飾子,があり__strongます。これは、変数を上で説明した方法で動作させます。これは、任意のオブジェクト変数のデフォルトです --NSArray * a;と同等の強い参照__strong NSArray * a;です。1 つの違いは、変数が再設定されたときだけでなく、メソッドの最後など、変数がスコープ外になったときにオブジェクトが解放されることです。

- (void)activate {
    NSArray * a = [NSArray array];
    // a is __strong by default, takes ownership

} // a is going out of scope. To prevent a leak, ARC releases the array
于 2012-05-30T17:38:04.290 に答える
1

1) Strong は、retain の ARC 代替品です。基本的に、 などのこのプロパティに値を割り当てると[foo setBar: someValue]、プロパティをサポートするインスタンス変数が、 に渡さbarれたパラメータの保持カウントをインクリメントすることを意味します。someValuesetBar

2)あなたが言及しているのは__strong接頭辞の使用だと思いますので、そうです。

于 2012-05-30T17:28:30.893 に答える