2012-01-14 5 views
3

Appleのこのような例を与える傾向がある:私はこのようにそれを行うことができれば、私はそれをはるかに読みやすいと論理を見つけるだろうARC所有者修飾子の位置は重要ですか?

NSError __strong *error = nil; 

または

-(BOOL)performOperationWithError:(NSError * __autoreleasing *)error; 

を:

__strong NSError *error = nil; 


-(BOOL)performOperationWithError:(__autoreleasing NSError**)error; 

クイックテストでは、コンパイラが自分の書き方について不平を言っていないことが明らかになりました。とにかくそれをやっているのですか、それともこれのように書くのはいいですか?

答えて

4

いいえ、所有権修飾子の位置はまったく重要ではありません。オーナーシップ修飾子はオブジェクトへのポインタ型の意味しか持たないので、あなたの意図はあいまいではありません。コンパイラは、どこに配置しても意図が何であるかを簡単に把握できるので、ARCはそれを正確に実行します。

iOS Apple Developer Forumsにアクセスしている場合は、Appleのエンジニアと同じ質問をどこで聞いたかは、https://devforums.apple.com/message/458606で確認できます。

+0

このケースでは*明らかに重要ではありませんが、それを正しい場所に置いてください。例えば。 'const T * *'は 'T * const *'と同じではありません。なぜなら、コンパイラが配置を修正するだけなので、なぜ '__autoreleasing'が間違っているのですか? – CRD

+0

コンパイラが修正するわけではありません。この場合、彼らはすべて同じように有効であり、すべて同じことを意味します。あなたが正しいのは、 'const'の場合に違いがあります。ここでは、そうではありません。それは誤った類推です。 –

1

コンパイラが不平を言っておらず、そのために新しいリークがない場合、それは良いことです。また、あなたのアセンブリ出力を他の方法と比較して、違いがあるかどうかを確認することもできます(テキストエディットではなくdiffツールを使用してください)。

asmまたはバイナリがコンパイラはそれをまったく同じものとして扱います。また、インストゥルメントを前後にテストし、漏れがないかどうかを確認して、メモリが正しく処理されていることを確認することもできます。

+0

コードアセンブリまたはプリプロセッサの内容を表示するにはどうすればよいですか? –

+0

うまくいけば、これは役に立ちます:http://stackoverflow.com/questions/5433935/how-can-i-examine-assembly-in-xcode-4 – Tim

関連する問題