取经地址

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 - 全屏滑动的更多相关文章

  1. iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果

    8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...

  2. 移动端全屏滑动的小插件,简单,轻便,好用,只有3k swiper,myswiper,page,stage

    https://github.com/donglegend/mySwiper mySwiper 移动端全屏滑动的小插件,简单,轻便,好用,只有3k 下载 直接下载 bower install mySw ...

  3. UINavigationController实现全屏滑动返回功能

    说明: UINavigationController默认在push出的控制器中都有边沿滑动返回功能,但是只能从屏幕左边滑才能返回,若从屏幕中间画并没有效果.下面实现全屏滑动功能. 探究: 系统默认能够 ...

  4. Android 高大上的侧滑菜单DrawerLayout,解决了不能全屏滑动的问题

    DrawerLayout预览 DrawerLayout主要功能就是 实现侧滑菜单效果的功能,并且可以通过增加一些设置来实现高大上的效果,那么就请看动态图:   注意左上角那个图标,有木有很好玩,哈哈. ...

  5. iOS 全屏侧滑/UIScrollView/UISlider间滑动冲突

    代码地址如下:http://www.demodashi.com/demo/13848.html 效果预览 一.前期准备 有一个支持全屏侧滑返回的视图控制器ViewController,ViewCont ...

  6. macbook air扩展显示器全屏滑动怎样不一起滑动?

    macbook air 外接了一个显示器(扩展),当我有多个桌面时,用手指滑动触控板切换桌面时,扩展屏幕也跟着切换桌面有什么办法能让我在切换主屏幕桌面的时候,扩展屏幕保持不动呢?上周还好好的,昨晚关机 ...

  7. uni-app仿抖音APP短视频+直播+聊天实例|uniapp全屏滑动小视频+直播

    基于uniapp+uView-ui跨端H5+小程序+APP短视频|直播项目uni-ttLive. uni-ttLive一款全新基于uni-app技术开发的仿制抖音/快手短视频直播项目.支持全屏丝滑般上 ...

  8. iOS 全屏布局

    edgesForExtendedLayout属性用于替代wantsFullScreenLayout,控制页面显示的范围,默认值是UIRectEdgeAll automaticallyAdjustsSc ...

  9. iOS 全屏播放网页视频退出后状态栏被隐藏

    使用wkWebView播放网页上的视频,播放完成后,退出视频返回到网页发现app的状态整个被隐藏了,解决方法,监听状态栏隐藏通知,在适当的时候让状态栏显示出来 [[NSNotificationCent ...

随机推荐

  1. unity3d 我的面试经历

    昨天在上海的一家公司面试成功了 这是我第一次面试,也是我的第一份工作 先上我的简历给大家参考下吧 个人简历 个人信息: 姓 名: 廖旭升         学 历: 无 民 族: 汉           ...

  2. Node基础:url查询参数解析之querystring

    模块概述 在nodejs中,提供了querystring这个模块,用来做url查询参数的解析,使用非常简单. 模块总共有四个方法,绝大部分时,我们只会用到 .parse(). .stringify() ...

  3. 深入grootJs(进阶教程)

    深入grootJs 这篇教程的原则是把grootJs原理讲透,主要真正理解了原理才能用起来随心所欲 mvvm模式简介 grootJs的vm结构 扫描函数sweep 垃圾回收的原理 加载器中的预编 ,控 ...

  4. 深入浅出ASP.NET MVC5系列之一

    前言 为避免看官乏味,本系列博客限定在较新的.Net framework 4.5.1,Asp.net MVC5,IIS 7.X集成模式. 对于微软应用层的技术.我向来不舍得花太多时间学习.但又由于公司 ...

  5. C#之发送邮件汇总

    最近想搞个网站,其中找回密码用到了我们常见到的利用邮箱找回.利用邮箱的好处是可以有效确认修改密码者的身份. 百度了几篇博客,各有千秋.最终采用了QI Fei同志的博客,有Demo下载,看了看思路清晰, ...

  6. poj 1698 Alice‘s Chance

    poj 1698  Alice's Chance 题目地址: http://poj.org/problem?id=1698 题意: 演员Alice ,面对n场电影,每场电影拍摄持续w周,每周特定几天拍 ...

  7. 61-umask 简明笔记

    设定在创建文件时的权限掩码 umask [mask] 参数 mask可以是3位八进制数或者是如同在chmod中使用的符号值,mask指定不允许的权限(文件的实际权限是777减去umask值) 如果没有 ...

  8. C++命名规范

    1.1    类型名 首字母大写,末尾加_T.如: class TnppCoverageArea_T{…}; 1.2    1.2 变量和函数名 变量和函数名中首字母小写,其后每个英文单词的第一个字母 ...

  9. linux基础-第十四单元 Linux网络原理及基础设置

    第十四单元 Linux网络原理及基础设置 三种网卡模式图 使用ifconfig命令来维护网络 ifconfig命令的功能 ifconfig命令的用法举例 使用ifup和ifdown命令启动和停止网卡 ...

  10. 控制器中获取store

    在Controller中要获取View中的选中值我用[javascript] view plaincopyprint?var cmp = Ext.ComponentQuery.query('weldl ...