-
Notifications
You must be signed in to change notification settings - Fork 0
ARC与MRC(内存管理)
qingkong1998 edited this page Sep 12, 2018
·
2 revisions
- Edit -> Refactor-> Convert to Objective-C ARC
- 选中项目跟节点 -> 选中target -> Build Phases->Compile Sources (1 item) ->在需要设置为不使用ARC文件所在的行与complier Flags的列 的交汇处双击,写上命令 -fno-objc-arc
- 名称:原有类的名称 (分类名称)
- 文件名称:原有类的名称 + 分类名称
- 代码模块化
- 团队协作
- 可以扩充系统自带类的功能
- 在分类中可以声明和实现新的方法
- 在分类的方法中可以访问原有类的成员变量
- 给NSString类增加一个计算字符串中有多少数字的功能
-
给NSObject方法增加一个run方法
- 给NSObject扩展分类,应该非常谨慎,因为他会作用到所的类上面
- 分类只能扩充功能不能扩充属性
- 在分类使用@property 只能生成方法的声明,不能生成方法的实现,更不能生成成员变量
- 分类中不能有与原来类同名的方法,不同分类中也不能有同名的方法
- 【理解】如果分类中如果存在与原来类中的同名函数,那么分类中的方法会覆盖原有类中的方法(哪怕你没有导入这个分类)
- 【理解】如果多个分类中有相同的方法,最后将使用最后编译的那个分类中的方法
- 它是一种代表着方法的签名数据类型,我们也成为它使一个选择器
- 【掌握】定义普通的变量
-
【理解】作为方法实参
-
与NSObject 相关方法配合使用
-
【掌握】判断一个对象是否实现了某个方法
- respondsToSelector:(SEL)
-
[了解]执行对象上某个的方法
- performSelector:(SEL)
- performSelector:(SEL) withObject:(id)
- performSelector:(SEL) withObject:(id) withObject:(id)
-
【了解】延迟执行某个对象上的方法
- performSelector:(SEL) withObject:(id) afterDelay:(NSTimeInterval)]
-
【掌握】判断一个对象是否实现了某个方法
-
与NSObject 相关方法配合使用
-
[了解] 方法形参
- makeObject:(id) performSelector:(SEL)
- 【了解】作为方法的返回值
-
【掌握】定义变量
- 返回值类型 (^变量名称) (形参列表)
-
【掌握】定义功能
-
^返回值类型 (形参列表)
-
无参无返回值
- ^{ 语句... };
-
有参无返回值
- ^(参数列表){语句...}
-
有参有返回值
- ^(参数列表){语句...}
-
无参无返回值
-
^返回值类型 (形参列表)
-
【掌握】作为函数参数
- 返回值类型(^)(形参列表)
- 技巧:参数列表中写上参数的名称,方便以后使用
-
【理解】typedef 来定义类型
- typedef 返回值类型 (^block类型名称) (形参列表)
- 程序员的一天
- 当一个方法中前面一部分是确定的后面一部分也是确定的,只有中间一部分经常变化,那么中间的这部分就可以提取成为一个block
- block内部不可以改变局部变量的值
- 若想改变局部变量值,就需要使用__block 来修饰这个变量
-
@protocol 协议名称
//声明方法
@end
- 中间只写方法声明
- 需要遵守协议NSObject
- 以@protocol 开头以 @end 结尾
-
一个协议也可以遵守多个协议
-
@protocol 协议名称 <协议1**,协议2,协议3 ...**>
//声明方法
@end
-
- 第一步:定义协议
-
第二步:遵守协议
-
在声明类的时候,在类名后面的通过<协议名称>来遵守协议
-
@interface 类名 : 父类名称 <协议>
@end
-
-
在类扩展中遵守协议
-
@interface 类名() <协议>
@end
-
-
在声明类的时候,在类名后面的通过<协议名称>来遵守协议
- 第三步:实现协议中的方法
-
【掌握】注意点
-
一个类可以遵守多个协议中间以逗号隔开
-
@interface 类名 : 父类名称 <协议1,协议2,协议3...>
@end
-
-
一个类可以遵守多个协议中间以逗号隔开
-
id<协议名称> 变量名称
- 通过这种方式定义出来的指针变量,只能指向遵循了该协议的对象
- 通过这方式定义出来的指针变量,可以指向遵循该协议的任意对象
- @required
- 表示遵守该协议的类必须要实现的方法
- @optional
- 表示遵守协议的类可以选择实现的方法
- 当A类对象发生了什么事,想通知B类对象的时候(让B类对象成为A类对象的代理)
- 当A类对象有些事情,自己无法处理,需要B类对象帮助它处理( 让B类对象成为A类对象的代理)
- 当B类对象想要监听A类对象中发生的事情的时候(让B类对象成为A类对象的代理)
-
A类中定义协议
- 该协议名称为ADelegate,其中声明一些希望B类实现的方法
- A类中添加一个类型 id delegate的属性
-
A类中当发生了什么事的时候,调用delegate相应的方法
- 注意在调用这个方法之前首先要判断delegate是否确实实现了这个方法,只有delegate实现这个方法才能调用这个方法
-
B类遵守ADelegate的协议
-
@interface B() <ADelegate>
@end
-
-
B类中实现ADelegate协议中声明的方法
- 注意:这里实现的方法可以是某一个或某几个或是全部,取决B对象希望监听A对象的什么事件
- 将B类对象赋值给A类对象的delegate属性
-
婴儿与保姆
- 婴儿想吃了要通知保姆,让保姆成为婴儿代理
- 保姆想知道婴儿什么时候想吃了,让保姆成为婴儿的代理
- 婴儿自己不会吃,需要保姆帮忙,让保姆成为婴儿的代理
- 作者:qingkong 链接: https://github.com/qingkong1998/ios/wiki github微博:https://qingkong1998.github.io/ https://qingkong1998.github.io/ios/
- 来源:晴空 商业转载请联系作者获得授权,非商业转载请注明出处。