iOS開発におけるStrongとweakの深い理解

1626 ワード

最近のプロジェクトはあまり忙しくないので、暇があればプログラマーを困らせやすい問題をまとめて、不正確なところがあれば、ご指摘ください.
ARCはアップルがプログラマーのメモリ管理を簡素化するために発売したメモリ管理メカニズムで、オブジェクトの申請と解放作業は実行時にコンパイラによって自動的にretainとreleaseを追加します.
開発でstrongはいつ、weakはいつ、copyはいつ使いますか?
強いポインタStrong:
   :strong             ;
        OC ,        ,               strong   (NSArray,NSDictionary),             ,    strong

eg: @property (nonatomic, strong) NSArray *dataList; @property (nonatomic, strong) UILabel *label;
     
- (UILabel *)label {
if (_label == nil) {
    _label = [[UILabel alloc] init];
}
return _label;
}

弱針Weak:
sbまたはxibを使用してコントロールに線を引くとき、なぜドラッグした先属性がweakで修飾されているのでしょうか.eg
@property (weak, nonatomic) IBOutlet UILabel *label;

なぜなら、xibまたはsbにコントロールを追加する場合、追加されたサブビューはビューViewに追加され、コントローラControllerはそのルートビューViewのデフォルトは強参照であり、私たちのサブコントロールがviewに追加されるとself.view addSubView:この方法で追加されたコントロールが強参照されるためです.追加サブコントロールをstrongで修飾すると、サブコントロールを2つの強いポインタで強く参照することに相当するので、それを避けるためにweakで修飾する.
  : 
1. addSubView      subView       
2.           ,             ,    strong   

また,我々が開発する際に用いるエージェントもweakで修飾され,その目的はコントロールの循環参照を防止することである.
@property (nonatomic, weak) id delegate;

Copyの使用
copyの使用については、ネット上ではすでにcopyについての紹介がたくさんあります.それには深いcopyと浅いcopyが含まれています.ここではあまり言わないで、よく分からないならネットで資料を調べてもいいです.
copy        NSString   block

eg: @property (nonatomic, copy) NSString *str;
以上の内容はstrongとweakの個人的な理解で、後続は引き続き完備して、今日はここまで書いて、今コードを書き続けます.