1

iOS 5 で ARC を使用する場合、弱い IBOutlet はゼロ化参照を作成し、

self.< IBOutlet property > = nil;

-(void)viewDidUnload

iOS 4 (および ARC を使用) を使用していて、代わりにunsafe_unretainedを使用せざるを得ない場合、 viewDidUnloadをオーバーライドして、プロパティを手動で nil に設定する必要がありますか?

編集: これは私のケースに関連しています: IBOutlets は ARC の下で強いか弱いか? 例外は次のとおりです。ゼロ化参照を作成する「弱い」キーワードを使用できません。

私の質問がより明確になることを願っています。

ありがとう

4

2 に答える 2

3

ARC を使用する場合、ご存知のとおり、weak 属性は iOS5 以前では使用できません。そのコインの反対側は、unsafe_unretained を使用することです。弱い属性は、プロパティを自動的に nil に設定します。Unsafe_retained (別名、iOS 5 より前の「割り当て」) はそうではなく、自分でこれを行う必要があります。

于 2012-04-06T13:36:01.877 に答える
1

プロパティがない場合 (iOS の場合) IBOutlet は ivar になり、KVC によって設定および保持されます。を使用すると@property、ivar はプロパティを設定することによって設定されます。

ARC プロジェクトでは、ペン先を作成して項目 (たとえばUILabel) を .h ファイルにドラッグする@propertyと、.m ファイルと同様にストロングが追加され、プロパティを nil に設定する行がviewDidUnloadメソッドに追加され、プロパティの @synthesize ステートメント。

その作業の保持を処理する他の方法がありnib IBOutlets、いくつかのメトリックでさらに優れている場合があります。

Apple ドキュメントResource Programming Guide - Managing the Lifetimes of Objects from Nib Files から:

アウトレットの動作はプラットフォームに依存するため、実際の宣言は異なります。

iOS の場合は、次を使用する必要があります。
@property (nonatomic、retain) IBOutlet UserInterfaceElementClass *anOutlet;

OS X の場合は、次を使用する必要があります。
@property (assign) IBOutlet UserInterfaceElementClass *anOutlet;

私の信念は、Apple のやり方に反抗してはならないということです。また、Apple がプラットフォームの将来に関する内部情報を持っていることも考慮してください。:-)

于 2012-04-05T11:29:40.427 に答える