IOS Runtime關聯(lián)對象屬性關聯(lián)實現(xiàn)表格編輯文本

#import"ViewController.h"http://屬性關聯(lián)屬于動態(tài)運行時#import//設置keyconststaticNSString *key=@"indexPath";

有時候類的實例可能是某種機制所創(chuàng)建,而開發(fā)者無法令這種機制創(chuàng)建出自己所寫的子類實例。

可以給某對象關聯(lián)許多其他對象。這些對象會通過“鍵”來區(qū)分。

存儲對象值的時候,可以指明“存儲策略”,用以維護相應的“內存管理語義”。

以下方法用來管理關聯(lián)對象:

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

此方法以給定的鍵和策略為某對象設置關聯(lián)對象值。

② void objc_getAssociatedObject(id object, void *key);

此方法根據給定的鍵從某對象中獲取相應的關聯(lián)對象值。

③ void objc_removeAssociatedObjects(id object);

此方法移除指定對象的全部關聯(lián)對象。

4. 設置關聯(lián)對象用的鍵是個“不透明的指針”,即所指向的數(shù)據結構不局限于某種特定類型的指針。

再設置關聯(lián)對象值時,若想令兩個鍵匹配到同一個值,則二者必須時完全相同的指針才行。

跟NSDictionary不一樣。NSDictionary認為“isEqual:”返回YES,則二者相同。

故設置關聯(lián)對象值時,通常使用靜態(tài)全局變量做鍵

-?(UICollectionViewCell?*)collectionView:(UICollectionView?*)collectionView?cellForItemAtIndexPath:(NSIndexPath?*)indexPath

{

UICollectionViewCell*cell?=?[collectionView?dequeueReusableCellWithReuseIdentifier:@"Cell"forIndexPath:indexPath];

UITextView*textView=[[UITextView?alloc]initWithFrame:CGRectMake(0,0,?_imgHeight,30)];

textView.layer.borderWidth=2;

textView.layer.borderColor=[UIColor?redColor].CGColor;

[cell.contentView?addSubview:textView];

//屬性關聯(lián)? 設置

objc_setAssociatedObject(textView,?key.UTF8String,?indexPath?,?OBJC_ASSOCIATION_RETAIN);

textView.delegate=self;

returncell;

}

//UITextViewDelegate

-?(void)textViewDidEndEditing:(UITextView?*)textView

{

//屬性關聯(lián)? 獲取

NSIndexPath?*indexPath=objc_getAssociatedObject(textView,?key.UTF8String);

NSLog(@"%@",indexPath);

}

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容