パズルを完成させようとしています。
__strong
NSObject、NSStringなどのすべてのObjective-C保持可能オブジェクトポインタのデフォルトです。これは強力な参照です。ARC -release
は、スコープの最後でa とバランスをとります。
__unsafe_unretained
古い方法に等しい。保持可能なオブジェクトを保持せずに弱いポインターに使用されます。
__weak
以下のようなものです__unsafe_unretained
、それはポインタが参照されるオブジェクトが割り当て解除されるとすぐにnilに設定されることをオートゼロ弱参照の意味だことを除いて。これにより、ダングリングポインターやEXC_BAD_ACCESSエラーの危険性がなくなります。
しかし、正確には何が__autoreleasing
良いのでしょうか?この修飾子を使用する必要がある場合の実用的な例を見つけるのに苦労しています。私はそれが次のようなポインターポインターを期待する関数とメソッドのためだけであると私は信じています:
- (BOOL)save:(NSError**);
または
NSError *error = nil;
[database save:&error];
ARCでは、次のように宣言する必要があります。
- (BOOL)save:(NSError* __autoreleasing *);
しかし、これは曖昧すぎるため、その理由を完全に理解したいと思います。私が見つけたコードスニペットは、2つの星の間に__autoreleasingを配置しています。タイプはNSError**
(NSErrorへのポインターポインター)なので、__autoreleasing
単純に前ではなく星の間に配置するのはNSError**
なぜですか?
また、私が頼らなければならない他の状況があるかもしれません__autoreleasing
。