0

ローカル変数からのテキスト セットを持つ UITextView があります。この後、次のことが可能ですか:

[textView setEnabled:NO];

リテイン回数が1増える?

編集:

それが問題である場合、「問題」は小さなビューのコンストラクターにあります。

- (id)initWithData:(NSMutableArray *) {
  UITextView *myText;
  if ( ( self = [super init] ) ) {
    myText = [[UITextView alloc] initWithFrame:aRect];
    // retain count = 1;
    [myText setEnabled:NO]; // retain count 2
    [self addSubview:myText]; // retain count 3
    [myText release];  // retain count 2
  }
}

さて、テキストビューを「自動解放」しましたが、メモリが適切に管理されているかどうかはわかりません (投稿はこの質問に関連しています)。

4

1 に答える 1

3

可能?絶対。

手入れする?少しもない。setEnabled:サブクラスでオーバーライドし、あなたがretain呼び出しを行っている場合を除きます。

そうである場合、それはフレームワークの実装の詳細です。


保持数は、絶対数ではなくデルタと考えてください。絶対値は無意味です。したがって:

- (id)initWithData:(NSMutableArray *) {
  UITextView *myText;
  if ( ( self = [super init] ) ) {
    myText = [[UITextView alloc] initWithFrame:aRect]; // rc +1
    [myText setEnabled:NO]; // rc change irrelevant
    [self addSubview:myText]; // rc change irrelevant
    [myText release];  // rc -1
  }
}

そうです、メモリを正しく管理しています。ローカル変数のスコープの最後でmyText、すべての保持はリリースによってバランスが取れています。

You の場合addSubview:、そのメソッドがオブジェクトを保持するかコピーを作成するかは、このスコープのメモリ管理には関係のない実装の詳細です。明らかに、サブビューが参照を維持し、それを保持することはその目的のために必要ですが、それはこのメソッドのメモリ管理の範囲を超えた実装の詳細です!

于 2011-03-30T17:28:25.153 に答える