iOS - 全屏滑动
2016-04-16 20:41
453 查看
取经地址
1.使用关联
关联是指把两个对象相互关联起来,使得其中的一个对象作为另一个对象的一部分。使用关联,是基于关键字的,因此,我们可以为任意对象增加任意多的关联,但是关键字是唯一的。关联可以保证
被关联对象在
关联对象的整个生命周期都是可用的。
1.1 创建关联、获取被关联的关联对象、断开关联
使用Objective-C中的runtime.h中1) 创建关联:objc_setAssociatedObject函数
/** * 使用给出的关键字和关联策略来设置对象的关联值 * * @param object 被关联对象、目标对象 * @param key 关键字 * @param value 关联对象,输入nil时候清除存在关联 * @param policy 关联策略 */ void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) //*> objc_AssociationPolicy 关联策略枚举 typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) { OBJC_ASSOCIATION_ASSIGN = 0, OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, OBJC_ASSOCIATION_COPY_NONATOMIC = 3, OBJC_ASSOCIATION_RETAIN = 01401, OBJC_ASSOCIATION_COPY = 01403 };
2)获取关联:objc_getAssociatedObject函数
/** * 通过关键字返回被关联对象的关联值 * * @param object 被关联对象、目标对象 * @param key 关键字 * * @return The value associated with the key \e key for \e object. */ id objc_getAssociatedObject(id object, const void *key)
3)断开关联:objc_removeAssociatedObjects函数
/** * 移除被关联对象的所有关联 * * @param object 被关联对象、目标对象 * * @note The main purpose of this function is to make it easy to return an object * to a "pristine state”. You should not use this function for general removal of * associations from objects, since it also removes associations that other clients * may have added to the object. Typically you should use \c objc_setAssociatedObject * with a nil value to clear an association. */
备注:
1.关键字:void *类型,通常使用静态变量作为关键字,例如:
static const char *associatedKeyPanGesture = "__associated_key_pangesture";
2.关联策略:objc_AssociationPolicy枚举,和类声明中修饰属性的关键字一样。有assign和retain之分,有atomically和 no atomically之分。
1.2创建关联的测试代码
static const char * associatedKeyMyname = "_associated_key_myName"; static const char * associatiedKeyPersonalInfo = "_associated_key_personalinfomation"; //*> 关联对象 - (void)AssociationApiTest { //*> 把array关联到tempstring - 观察作用域 NSDictionary * infoDic = @{@"Name":@"吕洪阳",@"Age":@"23",@"Gender":@"Male"}; NSString * infoNote = @"Personal information"; objc_setAssociatedObject(infoNote, associatiedKeyPersonalInfo, infoDic, OBJC_ASSOCIATION_RETAIN); NSDictionary * associatedInfoDic = (NSDictionary *)objc_getAssociatedObject(infoNote, associatiedKeyPersonalInfo); NSLog(@"\n%@%@",infoNote,associatedInfoDic); //*> 把_myName关联到self - 观察作用域 _myName = @"吕洪阳"; objc_setAssociatedObject(self, associatedKeyMyname, _myName, OBJC_ASSOCIATION_RETAIN); NSNumber * associatedName1 = (NSNumber *)objc_getAssociatedObject(self, associatedKeyMyname); _myName = @"Steven Jobs"; NSNumber * associatedName2 = (NSNumber *)objc_getAssociatedObject(self, associatedKeyMyname);\ NSLog(@"关联姓名之后:%@",associatedName1); NSLog(@"关联姓名修改:%@",associatedName2);//*> 关联的name没有因为关联对象的值而发成改变! } //*> 打印结果: /* 2016-04-16 22:10:20.778 AssociatedDemo[2648:1100881] Personal information{ Age = 23; Gender = Male; Name = "\U5415\U6d2a\U9633"; } 2016-04-16 22:10:20.779 AssociatedDemo[2648:1100881] 关联姓名之后:吕洪阳 2016-04-16 22:10:20.779 AssociatedDemo[2648:1100881] 关联姓名修改:吕洪阳 */
2.全屏滑动POP代码
我的测试代码多多指教相关文章推荐
- iOS 项目一直在后台执行
- iOS9横竖屏设置的处理方法和实例讲解
- iOS转场动画概览
- iOS JSPatch
- iOS开发~CocoaPods使用详细说明
- iOS block代码块强引用问题
- iOS backBarButtonItem设置
- 关于ios导航控制器的知识总结
- ArcGIS Runtime SDK for iOS(五) --- 空间几何分析与操作(上)
- ios申请真机调试( xcode 5)详细解析
- iOS中多线程实现方案
- iOS中倒计时
- iOS开发-由浅至深学习block
- iOS——Quartz2D
- iOS学习笔记30-系统服务(三)蓝牙
- iOS学习笔记30-系统服务(三)蓝牙
- 离屏 渲染
- iOS 基本编码格式转化
- autolayout 设置使用tableviewHeaderView
- iOSapp的json告示