IOS 学习日志 2015-3-17

Objective--C 

一 关键字
@class 导入已有的类
id 对象类型 表示任何一个ObjC对象类型
Block  对象类型 OC中称为代码块 类似于C中的函数式指针 
typedef 定义数据类型 
@Category 分类,扩展

二 函数


三 规则 
1 id 
A id可以表示任何一个ObjC对象类型,类型后面的”<协议名>“用于约束作为这个属性的对象必须实现该协议(注意:使用id定义的对象类型不需要加“*”);

2 @class 
A 在.h文件中如果使用了另一个文件的类或协议我们可以通过@class或者@protocol进行声明,而不必导入这个文件,这样可以提高编译效率

3 Block 
A Block类型定义:返回值类型(^ 变量名)(参数列表)(注意Block也是一种类型);
B 感觉类似于匿名函数
C 变量名在类定义时可以不用带*
D Block的typedef定义:返回值类型(^类型名称)(参数列表);
E Block的实现:^(参数列表){操作主体};
F Block中可以读取块外面定义的变量但是不能修改,如果要修改那么这个变量必须声明_block修饰;

3 Category
A 扩展现有的类并且不需要改动原类
B 新建一个Objective-C 文件,选择类的类型为Category,还有要选择你要修改的类,注意看创建后的文件名,它是由原类名+新类名一起组成的,必须要会有那个加号符,
  例如 NSString 扩展后的文件名为 NSString+Trim ,再看类的定义上需要改动,原来定义一个普通的类是 @interface 类名:NSObject,扩展后就是 @interface 类名(扩展名) 
  例如 @interface NSString(Trim)
C 适用范围 
	I 系统或框架中的类
	II   类包含了很多个方法实现,而这些方法需要不同团队的成员来实现
	III 类包含了很多个方法实现,而这些方法需要不同团队的成员来实现
D 需要注意的问题
	I Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。
	II Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。
	III	和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。