iOS中關聯(lián)對象的簡單使用objc_setAssociatedObject

轉自 http://www.cnblogs.com/cqcnblogs/p/5796462.html

首先看一下此方法接收的參數(shù)

objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)

被關聯(lián)的對象,下面舉的例子中關聯(lián)到了UIAlertView

要關聯(lián)的對象的鍵值,一般設置成靜態(tài)的,用于獲取關聯(lián)對象的值

要關聯(lián)的對象的值,從接口中可以看到接收的id類型,所以能關聯(lián)任何對象

關聯(lián)時采用的協(xié)議,有assign,retain,copy等協(xié)議,具體可以參考官方文檔

下面就以UIAlertView為例子簡單介紹一下使用方法

使用場景:在UITableView中點擊某一個cell,這時候彈出一個UIAlertView,然后在UIAlertView消失的時候獲取此cell的信息,我們就獲取cell的indexPath

第一步:

#import

static char kUITableViewIndexKey;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

......

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"

message:@"這里是xx樓"

delegate:self

cancelButtonTitle:@"好的"

otherButtonTitles:nil];

//然后這里設定關聯(lián),此處把indexPath關聯(lián)到alert上

objc_setAssociatedObject(alert, &kUITableViewIndexKey, indexPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

[alert show];

}

第二步:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

if (buttonIndex == 0) {

NSIndexPath *indexPath = objc_getAssociatedObject(alertView, &kUITableViewIndexKey);

NSLog(@"%@", indexPath);

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容