再探Objective-C.7

•          本章总结内容有:

1.ARC/MRC转换.

2.分类.

3.类扩展.

4.SEL.

5.block.

6.协议.

7.代理

•                        【1】ARC 与 MRC

•                                      MRC项目 转 ARC项目

•                                                     Edit -> Refactor-> Convert to Objective-C ARC

•                                      MRC 与 ARC 共存

•                                                     选中项目跟节点 -> 选中target -> BuildPhases->Compile Sources (1 item) ->在需要设置为不使用ARC文件所在的行与complier Flags的列 的交汇处双击,写上命令 -fno-objc-arc

•                        【2】分类

•                                      【*】作用:扩充原有类的功能

•                                      【*】 定义

•                                                     名称:原有类的名称 (分类名称)

•                                                     文件名称:原有类的名称 + 分配名称

•                                      【*】优点

•                                                     代码模块化

•                                                     团队协作

•                                                     可以扩充系统自带类的功能

•                                      【*】使用

•                                                     在分类中可以声明和实现新的方法

•                                                     在分类的方法中可以访问原有类的成员变量

•                                      【*】练习

•                                                     给NSString类增加一个计算字符串中有多少数字的功能

•                                                     给NSObject方法增加一个run方法

•                                                                   给NSObject扩展分类,应该非常谨慎,因为他会作用到所的类上面

•                                      【*】注意点

•                                                     分类只能扩充功能不能扩充属性

•                                                     在分类使用@property 只能生成方法的声明,不能生成方法的实现,更不能生成成员变量

•                                                     分类中不能有与原来类同名的方法,不同分类中也不能有同名的方法

•                                                     【*】如果分类中如果存在与原来类中的同名函数,那么分类中的方法会覆盖原有类中的方法(哪怕你没有导入这个分类)

•                                                     【*】如果多个分类中有相同的方法,最后将使用最后编译的那个分类中的方法

•                        【3】类扩展

•                                      用在.m文件中,给类增加私有的成员变量和方法

•                                      类扩展中小括号中没有内容

•                        【4】SEL

•                                      概念【*】

•                                                     它是一种代表着方法的签名数据类型,我们也成为它使一个选择器

•                                      使用

•                                                     【*】定义普通的变量

•                                                     【*】作为方法实参

•                                                                   与NSObject 相关方法配合使用

•                                                                                 【*】判断一个对象是否实现了某个方法

•                                               respondsToSelector:(SEL)

•                                                                                [*]执行对象上某个的方法

•                                                performSelector:(SEL)

•                                               performSelector:(SEL)withObject:(id)

•                                               performSelector:(SEL)withObject:(id) withObject:(id)

•                                                                                【*】延迟执行某个对象上的方法

•                                                performSelector:(SEL) withObject:(id)afterDelay:(NSTimeInterval)]

•                                                    [*] 方法形参

•                                                                  makeObject:(id)performSelector:(SEL)

•                                                    【*】作为方法的返回值

•                                     【*】OC中的方法调用过程

•                       【5】block

•                                     【*】作用:封装代码

•                                     【*】优点:消除了函数不能能定义在方法内部的缺点,使用起来更加灵活

•                                     【*】使用

•                                                    【*】定义变量

•                                                                  返回值类型 (^变量名称) (形参列表)

•                                                    【*】定义功能

•                                                                  ^返回值类型 (形参列表)

•                                                                                无参无返回值

•                                                                                              ^{   语句...   };

•                                                                                有参无返回值

•                                                                                              ^(参数列表){语句...}

•                                                                                有参有返回值

•                                                                                              ^(参数列表){语句...}

•                                                    【*】作为函数参数

•                                                                  返回值类型(^)(形参列表)

•                                                                  技巧:参数列表中写上参数的名称,方便以后使用

•                                                    【*】typedef来定义类型

•                                                                  typedef 返回值类型 (^block类型名称) (形参列表)

•                                     【*】使用场景

•                                                    程序员的一天

•                                                    当一个方法中前面一部分是确定的后面一部分也是确定的,只有中间一部分经常变化,那么中间的这部分就可以提取成为一个block

•                                     【*】注意点

•                                                    block内部不可以改变局部变量的值

•                                                    若想改变局部变量值,就需要使用__block 来修饰这个变量

•                       【6】协议

•                                     【*】概念:两个或两个以上对象之间约定

•                                     【*】定义

•                                                      @protocol 协议名称 <NSObject>

•                                                       

•                                                      //声明方法

•                                                       

•                          @end

•                                                                  中间只写方法声明

•                                                                  需要遵守协议NSObject

•                                                                  @protocol 开头以 @end 结尾

•                                                    一个协议也可以遵守多个协议

•                                                                    @protocol 协议名称 <协议1,协议2,协议3 ...>

•                                                                     

•                                                                    //声明方法

•                                                                     

•                                 @end

•                                     【*】协议的基本使用

•                                                    第一步:定义协议

•                                                    第二步:遵守协议

•                                                                  在声明类的时候,在类名后面的通过<协议名称>来遵守协议

•                                                                                  @interface 类名 : 父类名称 <协议>

•                                                                                   

•                                        @end

•                                                                  在类扩展中遵守协议

•                                                                                  @interface 类名()  <协议>

•                                                                                   

•                                        @end

•                                                    第三步:实现协议中的方法

•                                                    【*】注意点

•                                                                  一个类可以遵守多个协议中间以逗号隔开

•                                                                                  @interface 类名 : 父类名称<协议1,协议2,协议3...>

•                                                                                   

•                                        @end

•                                     【*】id类型与协议

•                                                    id<协议名称> 变量名称

•                                                                  通过这种方式定义出来的指针变量,只能指向遵循了该协议的对象

•                                                                  通过这方式定义出来的指针变量,可以指向遵循该协议的任意对象

•                                     【*】两个关键字

•                          @required

•                                                                  表示遵守该协议的类必须要实现的方法

•                          @optional

•                                                                  表示遵守协议的类可以选择实现的方法

•                       【7】代理设计模式

•                                     使用场景

•                                                    当A类对象发生了什么事,想通知B类对象的时候(让B类对象成为A类对象的代理)

•                                                    当A类对象有些事情,自己无法处理,需要B类对象帮助它处理( 让B类对象成为A类对象的代理)

•                                                    当B类对象想要监听A类对象中发生的事情的时候(让B类对象成为A类对象的代理)

•                                     实现步骤

•                                                    A类中定义协议

•                                                                  该协议名称为ADelegate,其中声明一些希望B类实现的方法

•                                                    A类中添加一个类型 id<ADelegate> delegate的属性

•                                                    A类中当发生了什么事的时候,调用delegate相应的方法

•                                                                  注意在调用这个方法之前首先要判断delegate是否确实实现了这个方法,只有delegate实现这个方法才能调用这个方法

•                                                    B类遵守ADelegate的协议

•                                                                    @interface B() <ADelegate>

•                                                                     

•                                 @end

•                                                    B类中实现ADelegate协议中声明的方法

•                                                                  注意:这里实现的方法可以是某一个或某几个或是全部,取决B对象希望监听A对象的什么事件

•                                                    将B类对象赋值给A类对象的delegate属性

•                                     使用场景

•                                                    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值