函数指针
一个指向函数的指针
block
block的typedef 格式:typedef 返回值类型(^block名)(参数类型列表);
使用时:block名 变量名; 此时block名是类型名,如同Int这种
如有参有返回值: typedef int(^blockType){int,int };
1.block内部可以访问全局变量,也可以访问全局变量和外部定义的局部变量
2.block内部可以修改自身内部定义的变量,可以修改全局变量,不可以修改外部定义的局部变量
3.如果硬要修改外部定义的局部变量,那么这个局部变量应该是被__block所修饰的
__block是个关键字,被这个关键字修饰的变量可以被Block所修改
block作为函数的返回值
1.起别名
2.返回值类型改成这个别名
3.接收返回的block
4.使用返回的block
block书写:x-code中输入inlineblock回车,很方便,防止写错格式
block作为函数参数时,尽量写形参列表,不要写实参列表。
protocol
声明一些必须实现和选择实现的方法
协议:只生成一个.h文件,
1.声明格式:@protocol 协议名<NSObject> @end
2.采纳格式:类采纳协议 @interface 类名:NSObject<采纳的协议名> @end
3.在类的.m文件中实现协议中声明的方法
所有的协议都采纳NSObject
一个协议可以遵守另一个协议
类和协议可以采纳多个协议,格式<协议1,协议2,协议3>
父类协议中声明的方法也要被采纳
必须实现:@required
选择实现:@optional
类型限制格式:id<协议名称>变量名
protocol代理设计模式
1.定义一个协议
2.创建代理类,遵守协议
3.本身有一个属性,id<协议名>
4.调用代理类的方法
5.实现
NSString
普通创建时一般存于数据段区,内容相同时,地址相同。
通过XXXWithFormat的形式,不存在与数据段,内容相同,地址相同
对象方法 writeFormat(写入文件),第一个参数:你要写到哪 (文件路径) 第二个参数:原子性,是否加锁 第三个参数:编码格式,通用UTF-8 第四个参数:目前无特殊情况就用nil 返回值为BOOL,判断是否写成功了
类方法 读取文件(stringWithContentsOfFile),第一个参数:文件路径 第二个参数:编码格式 第三个参数:nil