#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);
}