IOS開発復習ノート(3)-ARC

1768 ワード

1.ARC
releaseまたはretain文を自分で呼び出すと、ARCが有効なときにコンパイルファイルにエラーが発生します.-fno-objc-arcと-fobjc-arcの2つのコンパイラフラグを使用して、ARCと非ARCのコードを混在させることができます.
以下のコンパイルではARCがサポートされていますが、ファイルコードではARCはサポートされていません.
# if !__has_feature(objc_arc)

//this code do not support to ARC

-(void) release{

//release your var

}

#endif

ARCエンジニアリングで非ARCのサードパーティコードを統合する:ARCでコンパイルされていないサードパーティフレームワークを使用する場合、コンパイルライブラリ内のファイルは-fno-objc-arcコンパイルスイッチを使用する必要があります.Edit->Refactor->convert to Object-c ARC
非ARCエンジニアリングでARCコードを統合する場合:コンパイルエラーは発生しませんが、メモリの漏洩に直面する可能性があります.このようなことを回避するには、-fobjc-arcを使用してARCでコンパイルされたサードパーティ製コードをマークする必要があります.
2.フレーム内のARC
1)帰零弱引用
弱い1は、参照カウントの値に関心を持たずにポインタを持つことでループの保持を回避しますが、メモリ(ポインタがメモリを指す)が破棄されると、弱い参照ポインタは無効になります.メモリを破棄するとアクセスポインタがクラッシュし、ゼロリファレンスメモリを破棄した後にポインタをゼロに戻す方法で問題を解決します.
2)所有権修飾子
ARCはretainとreleaseを自動的に挿入しますが、割り当てられたメモリを破棄する正確なタイミングを示すヒントが必要です.これらのヒントは所有権修飾子です.
  • __strong
  • __weak
  • __unsafe_unretained
  • __autoreleasing

  • 最初の3つの属性に使用可能な宣言.属性宣言には二重下線は必要ありません.デフォルトの所有権修飾子は__です.strong
  • __strong

  • なぜならstrongはデフォルトなので、
    @property (nonatomic,strong) NSString *someString;
    
    // 
    
    @property (nonatomic) NSString *someString;

    __strongはretainに等しい.