私はちょうどinitメソッドで正しく失敗する方法を読んできました。そして、ドキュメントはお互いに同意していないようです。例外をスローすることをお勧めしますが、他の人は、クリーンアップとnilの返却を推奨しています。現在のベストプラクティスは何ですか?initメソッドの[self release]、[self dealloc]または[super dealloc]?
12
A
答えて
16
一般的に受け入れられている方法は、失敗した場合にnilを返すことです。しかし、あなたは、リークを避けるために、自己を解放したいん:例外の
-(id)init
{
if (self = [super init]) {
...
if (thingsWentWrong) {
[self release];
return nil;
}
...
}
return self;
}
0
私が常に使用してきた方法は、クリーンアップしてnilを返すことです。あなたの質問のタイトルで言及した3つのメソッドは、コール階層内のsegfaultをより高くすることがありますが、nilを返すことはできません。私は、アップル社のドキュメントは、失敗しても何も返さないと言います。矛盾をどこで見つけていますか?
6
Cocoaの哲学は、彼らが唯一の方法に不正な引数を渡すように、プログラマエラーである状況でスローされるべきであるということです。何かがうまくいかない場合、メソッドは単にNOまたはnilを返し、NSError ** "out"パラメータを使用して詳細を報告してください。
これには、最初のメソッドが含まれます。エラーの状況が、完成した製品で正当に発生する可能性のあるものである場合、メソッドは自己をリリースしてリークを回避し、ゼロを返さなければなりません。
9
適切な解決策(例外および/または[self release]; return nil;
)が適用されているので、私は間違った解決方法を取り上げます。
dealloc
を直接送信しないでください。それはrelease
さんの仕事です。 (あなたのコードがGCの下で実行されている場合は、dealloc
は適用できません。問題の原因を特定するにはどうすればよいでしょうか?)
super
を直接使用しないでください。それはあなた自身のdealloc
の実装をスキップします。
関連する問題
- 1. if((self = [super init]))?
- 2. super dealloc EXC_BAD_ACCESSエラー
- 3. MyDownloader実装のsuper deallocのexc_bad_access
- 4. iPadで問題を起こしているUIViewControllerのdealloc内の[super dealloc]
- 5. MyObject __init __()クラスのsuper(MyObject、self).__ init __()は何をしますか?
- 6. UIAlertViewDelegateクラス "self"インスタンスがボタンが押される前にdeallocされました
- 7. [self release]、[self retain]を使うのは良いアプローチですか?
- 8. - (void)dealloc質問
- 9. iOSプログラミング: 'super dealloc'がアプリをクラッシュさせる
- 10. iPhoneメソッドの質問(deallocとviewDidUnload)
- 11. のdealloc UILabel
- 12. "self = super init"について誰でも簡単に説明できますか?
- 13. なぜinitメソッドで(self)をチェックするのですか?
- 14. なぜ「[self class] == [super class]」ですか?
- 15. 静的UIViewControllerサブクラス内で[super dealloc]を呼び出さない
- 16. [myVar dealloc]と[myVar release]の相違点は何ですか?
- 17. removeObserver:forKeyPath:in dealloc
- 18. Xcode retaincount = 1 in dealloc
- 19. UIViewControllerのDealloc
- 20. はif(self){[self initFOO]} redundant?
- 21. deallocプロセスの観察方法
- 22. オブジェクトのinitメソッド内でselfキーワードを使ってivarsを割り当てる
- 23. `self`とはcreate(self、validated_data)メソッドの意味ですか?
- 24. iOS 11 EXC_BAD_ACCESS deallocのKERN_INVALID_ADDRESS
- 25. deallocのivarとプロパティのリリース
- 26. iPhone - deallocサブビューUIViewController removeFromSuperview
- 27. xcode 4.2 memory alloc/dealloc
- 28. iPhone deallocとviewDidUnload問題
- 29. deallocが2回呼び出されました
- 30. UIImage deallocは決して呼ばれません
フィードバックをお寄せいただきありがとうございます。これは私がやっていることであり、適切なアプローチだと思っていましたが、ドキュメント内の他の2つのメソッドへの参照は、私が気づいている特別なケースがあるかもしれないと思っていました。 – Kevin