IOS Runtime关联对象属性关联实现表格编辑文本

2016-10-10  本文已影响0人  回首向来潇瑟处

#import"ViewController.h"//属性关联属于动态运行时#import//设置keyconststaticNSString *key=@"indexPath";

有时候类的实例可能是某种机制所创建,而开发者无法令这种机制创建出自己所写的子类实例。

可以给某对象关联许多其他对象。这些对象会通过“键”来区分。

存储对象值的时候,可以指明“存储策略”,用以维护相应的“内存管理语义”。

以下方法用来管理关联对象:

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

此方法以给定的键和策略为某对象设置关联对象值。

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

此方法根据给定的键从某对象中获取相应的关联对象值。

③ void objc_removeAssociatedObjects(id object);

此方法移除指定对象的全部关联对象。

4. 设置关联对象用的键是个“不透明的指针”,即所指向的数据结构不局限于某种特定类型的指针。

再设置关联对象值时,若想令两个键匹配到同一个值,则二者必须时完全相同的指针才行。

跟NSDictionary不一样。NSDictionary认为“isEqual:”返回YES,则二者相同。

故设置关联对象值时,通常使用静态全局变量做键

- (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];

//属性关联  设置

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

textView.delegate=self;

returncell;

}

//UITextViewDelegate

- (void)textViewDidEndEditing:(UITextView *)textView

{

//属性关联  获取

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

NSLog(@"%@",indexPath);

}

上一篇下一篇

猜你喜欢

热点阅读