保持するためには、オブジェクトを少なくとも1回は保持する必要があります。複数回は許容されますが、キーは少なくとも1回です。保持することで、「これを利用できるようにする必要があります」と言い、リリースすることで、「もう必要ありません」と言います。たとえば、割り当てが解除された後、必要以上に物事を保持することは失礼で無駄です。そうすることはリークです。
あなたの特定の質問に:あなたの財産が保持されている場合、はい、あなたはある時点で解放しなければなりません。あなたdealloc
の時間は大丈夫です、またはあなたが所有する何かによってそれが再び保持された後はさらに良い時間です。サブビューにビューを追加すると、保持されている配列にオブジェクトが追加されます(UIView
スーパークラスはサブビューの配列を保持します)。配列自体はその要素を保持します。したがって、追加した直後のリリースは適切です。
さらに、サブビュー配列を知っていて、その内容が生涯保持されるため、コピーをまったく保持しない方がさらにクリーンです。これが、サブビューアウトレットが通常弱いと宣言される理由です。だから私は次のことをします:
@property(nonatomic, weak) UIBarButtonItem *printButton;
次に、initで:
UIBarButtonItem *aPrintButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(printWebPage:)];
// this is just a stack variable, retained because of the alloc
[self.view addSubview:aPrintButton]; // this provides a second retain
self.printButton = aPrintButton; // this does not retain because it's setter is declared weak
[aPrintButton release]; // release here subtracts one retain, leaving the one you need
UIView
サブクラスはサブビュー配列NSArray
の解放を処理し、要素の解放を処理するため、サブクラスに明示的な解放は必要ありません。