2017-02-21 25 views
1

関連付けられたオブジェクトは、iOSでプロパティを作成し、iOSでいくつかの狡猾な変更を行うために使用されます。誰でもこれらのことをどうやって説明してもらえますか?関連付けられたオブジェクトiOSのユニラートビュー

- (IBAction)doSomething:(id)sender { 
 
    UIAlertView *alert = [[UIAlertView alloc] 
 
         initWithTitle:@"Alert" message:nil 
 
         delegate:self 
 
         cancelButtonTitle:@"OK" 
 
         otherButtonTitles:nil]; 
 
    objc_setAssociatedObject(alert, &kRepresentedObject, 
 
          sender, 
 
          OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
 
    [alert show]; 
 
    
 
} 
 

 
- (void)alertView:(UIAlertView *)alertView 
 
clickedButtonAtIndex:(NSInteger)buttonIndex { 
 
    UIButton *sender = objc_getAssociatedObject(alertView, 
 
               &kRepresentedObject); 
 
    self.buttonLabel.text = [[sender titleLabel] text]; 
 
}

Appleの定義は、私はどちらか理解するのに役立ちません。 msgstr "指定されたキーと関連付けポリシーを使用して、指定されたオブジェクトに関連する値を設定します。"

答えて

0

私の知る限りでは、実行時に既存のクラスオブジェクトに新しいプロパティを追加することができます。実行時にオブジェクトがキーの任意の値を関連付けることができます。

関連オブジェクト、または連想参照、彼らがいたとして元々 既知であるOS X(IOSの4で利用可能) Snow Leopardで導入されたObjective-Cの2.0ランタイムの特徴は。

  • objc_setAssociatedObject
  • objc_getAssociatedObject
  • objc_removeAssociatedObjects

理由:この用語は、実行時にキーの 関連付ける任意の値にオブジェクトを可能に宣言以下 3つのC関数を指し私たちはこれを使用しますか?既存のクラスにカスタムプロパティを追加することができ、必要な場所を利用することができ、その後は実行時にそのプロパティを削除します。

はここにあなたの使用状況を1として、あなたはUIAlertViewクラスには送信者プロパティが存在しないことを言うことができるとあなたはあなたがしばらく必要な実行時プロパティを追加することができますassociateObjectの使用によってそのようUIAlertViewを変更しない権利を持っていますアラートデリゲートがコールします。

objc_setAssociatedObject(alert, &kRepresentedObject, 
          sender, 
          OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

これによりランタイムが追加され、実行時に使用後に削除することもできます。

あなたは、このリンクで詳細を見つけることができます:AssociatedObject

希望は、この意志は、実行時にAssociatedObject概念を理解するのに役立ちます。

関連する問題