#import"ViewController.h"http://屬性關(guān)聯(lián)屬于動(dòng)態(tài)運(yùn)行時(shí)#import//設(shè)置keyconststaticNSString *key=@"indexPath";
有時(shí)候類的實(shí)例可能是某種機(jī)制所創(chuàng)建式散,而開(kāi)發(fā)者無(wú)法令這種機(jī)制創(chuàng)建出自己所寫(xiě)的子類實(shí)例。
可以給某對(duì)象關(guān)聯(lián)許多其他對(duì)象师妙。這些對(duì)象會(huì)通過(guò)“鍵”來(lái)區(qū)分回梧。
存儲(chǔ)對(duì)象值的時(shí)候宣谈,可以指明“存儲(chǔ)策略”,用以維護(hù)相應(yīng)的“內(nèi)存管理語(yǔ)義”维贺。
以下方法用來(lái)管理關(guān)聯(lián)對(duì)象:
① void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy);
此方法以給定的鍵和策略為某對(duì)象設(shè)置關(guān)聯(lián)對(duì)象值域携。
② void objc_getAssociatedObject(id object, void *key);
此方法根據(jù)給定的鍵從某對(duì)象中獲取相應(yīng)的關(guān)聯(lián)對(duì)象值。
③ void objc_removeAssociatedObjects(id object);
此方法移除指定對(duì)象的全部關(guān)聯(lián)對(duì)象晶密。
4. 設(shè)置關(guān)聯(lián)對(duì)象用的鍵是個(gè)“不透明的指針”擒悬,即所指向的數(shù)據(jù)結(jié)構(gòu)不局限于某種特定類型的指針。
再設(shè)置關(guān)聯(lián)對(duì)象值時(shí)稻艰,若想令兩個(gè)鍵匹配到同一個(gè)值懂牧,則二者必須時(shí)完全相同的指針才行。
跟NSDictionary不一樣尊勿。NSDictionary認(rèn)為“isEqual:”返回YES僧凤,則二者相同。
故設(shè)置關(guān)聯(lián)對(duì)象值時(shí)元扔,通常使用靜態(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];
//屬性關(guān)聯(lián)? 設(shè)置
objc_setAssociatedObject(textView,?key.UTF8String,?indexPath?,?OBJC_ASSOCIATION_RETAIN);
textView.delegate=self;
returncell;
}
//UITextViewDelegate
-?(void)textViewDidEndEditing:(UITextView?*)textView
{
//屬性關(guān)聯(lián)? 獲取
NSIndexPath?*indexPath=objc_getAssociatedObject(textView,?key.UTF8String);
NSLog(@"%@",indexPath);
}