スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]@propertyのあれこれ2

前回もpropertyについて一度書きましたが、今回それでまた躓いてしまったのでひとつメモしておきます。
デリゲートをするときに自分のデリゲートの変数を作成します。
この時にプロパティを書くのですが、assignにするかretainにするかで悩みます。
この場合の違いはおそらくassignの場合は常時そのクラスをインスタンスとして持ち続ける場合。
retainにする場合は、そのインスタンスを生成時にreleaseする場合です。

assignはそのインスタンスを保持しません。
retainはそのインスタンスを保持します。
これはRetainCountに関係します。

//デリゲートのプロパティをどうするか?
@protocol SampleViewDelegate <NSObject>
@end

@interface SampleViewController : UIViewController{
id delegate;
}

//このクラスのインスタンスが保持され続ける場合
@property (nonatomic,assign) id<SampleViewDelegate> delegate;
//インスタンスが毎回破棄される場合
@property (nonatomic,retain) id<SampleViewDelegate> delegate;


RetainCountというのがあり、このカウントが0になるとインスタンスは解放されます。
インスタンス生成時、カウントが+1されます。(RetainCount:1)

assignにいれると、カウントは増えません。(RetainCount:1)
retainにいれると、カウントは増えます。(RetainCount:2)

assignの変数はreleaseを1回行えば解放されます。
retainの変数はreleaseを2回行えば解放されます。

しかし大概はautoreleaseをかけるので、(現在のxcode4.xにはARCがあるので自動でインスタンスをautoreleaseしています)

assignにいれると、インスタンスはそのメソッドの処理終了後に解放されます(変数が空っぽになります)。
一方retainならば、変数は確保されます(変数に残ったままになります)。

このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。