1. 程式人生 > >IOS執行時傳遞物件或者新增屬性

IOS執行時傳遞物件或者新增屬性

之前做一個專案時,碰到一個問題,為一個UITableViewCell中的不同按鈕繫結不同的物件,點選按鈕後獲取繫結的相應的物件。目前我所知道的有兩種方式可以實現該需求。1.使用IOS提供的執行時  2.之定義UIButton,為其設定屬性。下面介紹第一種方式:

一、使用執行時必須首先匯入:

#import "objc/runtime.h"

二、繫結物件:

objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>);這個方法可以讓一個物件和另一個物件關聯,就是說一個物件可以保持對另一個物件的引用,並獲取那個物件。引數分別表示:關聯的源物件、與物件關聯的鍵、關聯鍵的值、關聯的協議。關聯協議可以參考objc_AssociationPolicy,關聯的鍵一般是地址如:static char operationKey;  使用&operationKey作為鍵。值得型別是id。

三、獲取繫結的物件:

objc_getAssociatedObject(<#id object#>, <#const void *key#>);

四、例項應用,為UIButton繫結值:

//繫結值或物件

static const char * const kZSYPopoverListButtonClickForCancel = "kZSYPopoverListButtonClickForCancel";

objc_setAssociatedObject(self.cancelButton, kZSYPopoverListButtonClickForCancel, [block copy], OBJC_ASSOCIATION_RETAIN);

//獲取值或者物件

UIButton *button = (UIButton *)sender;

block = objc_getAssociatedObject(sender, kZSYPopoverListButtonClickForCancel);