2

重複の可能性:
NSStringのretainCountは2147483647です

MyTestClass.hという名前のクラスがあるとします。

異なる方法で初期化される 3 つの NSString 変数があります。

クラス構造は次のようになります

@interface MyTestClass : NSObject {

  NSString *testString1;
  NSString *testString2;
  NSString *testString3;

}

@property (nonatomic, retain) NSString *testString1;
@property (nonatomic, retain) NSString *testString2;
@property (nonatomic, retain) NSString *testString3;

@end

MyTestClass.m

@implementation MyTestClass

@synthesize testString1, testString2, testString3;


-(id) init{

    self.testString1 = @"";

    [self setTestString2:@""];

    testString3 = @"";

}

今、私はMyTestClassのオブジェクトを作成することを計画しています

MyTestClass *obj = [[MyTestClass alloc] init];

このコード行の実行後、 testString1testString2、およびtestString3の保持 カウントは1になると思います。

私は私の友人を正しいですか?

testString3 を解放するとどうなるか知っていますか?

これに関するヘルプをいただければ幸いです。

ありがとう

4

1 に答える 1

2

この例retainCountではリテラル文字列を使用しているため、これらの文字列オブジェクトは実際には解放されないため、重要ではありません (デルタとしても重要ではありません)。

ただし、実行時に割り当てられた文字列を各プロパティに割り当てる場合、最初の 2 つは保持され、3 番目は保持されません。プロパティは保持として宣言されており、一方にドット構文を使用し、もう一方に「setProperty」構文を使用しているため、同じセッターが実行され、そのセッターに渡されたオブジェクトが保持されます。3 番目の例では、プロパティのバッキング ivar を右側の値に設定するだけで、その所有権には影響しません。

注目に値するのretainCountは、デルタとしてのみ有用であり、明示的な数値と考えるべきではないということです。retainCount絶対値は予測不可能で役に立たないため、の値を明示的にチェックしないでください。あなたの質問ではこれを理解しているようですが、retainCount を扱うときはいつでも、関係者全員がそれを理解していることを確認することを繰り返す価値があります。

于 2012-07-05T12:53:49.287 に答える