-2

iOS開発者からのいくつかのコードで見ました。次のコードがあります。

void (^block)(NSUInteger buttonIndex, UIAlertView *alertView) = objc_getAssociatedObject(self, "blockCallback");

しかし。オブジェクト self をブロック コードに割り当てる理由がわかりません。メソッドの完全なコードは次のとおりです。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    void (^block)(NSUInteger buttonIndex, UIAlertView *alertView) = objc_getAssociatedObject(self, "blockCallback"); 
    if (block) { 
        block(buttonIndex, self); 
    } 
}
4

1 に答える 1

1

カテゴリは、UIAlertViewにブロックベースの機能を追加するために使用されています。これは、アラートビューにデリゲートメソッドを実装する必要がないことを意味します。代わりに、作成時にブロックを与えることができます。

ただし、カテゴリでは、インスタンス変数をオブジェクトに追加することはできません。この場合、ブロックは、ユーザーがアラートビューのボタンを押したときに後で実行できるように保存する必要があります。

これを回避するために、プログラマーは関連オブジェクトを使用しました。これにより、カテゴリーコードを作成するときに疑似アイバーを追加できます。詳細については、objective-cに関連付けられたオブジェクトを検索してください。

于 2012-12-12T09:27:00.910 に答える