1、
Arc的使用
Arc是自动内存管理;
arc的使用原则
1)、只要对象没有任何强类型指针引用就会被释放’。
2)、只要对象被任何强类型指针指引就不会被释放。
弱指针:__weak
被__weak修饰的指针就被称为弱型指针;
强类型指针
默认的指针都是强类型指针;
被__strong修饰的指针也是强类型指针。
使用Arc时可以重写dealloc方法,但是在重写方法时不能手动调用[super dealloc];
在Arc中通过@property生成的属性如果是OC的对象那么要用Strong来修饰。
如果生成的属性是基本类型,还是使用assign来修饰。
在Arc中解决retain循环,
解决方法:在进行@property时一边使用strong另一边使用 weak。
2、Category 分类
Category是OC的特有语法。
作用:
1)可以在不修改原来类的基础上为这个类扩充一些方法。
2)可以把一个类的内容分在多个不同的文件中存储。
3)便于团队协作开发。
格式
@interface 类名 (分类名)
@end
@implementation 类名 (分类名)
@end
注意:1、分类只能增加方法,不能为主类增加成员变量。
2、分类可以访问原来类中的成员变量。
优先级:如果分类和父类出现同名的方法,优先调用分类中的方法,
如果分类中出现同名的方法,(最后参与编译的优先);
->原来的类,
->父类;
Category的优点:
1)、实现了类的相关方法的模块化;
可以把不同的方法分配到了不同的分类文件中。
可以用一个分类代表一类功能(模块化)。
2)、支持团队协作
可以让团队中的内部成员,共同扩充某个类的功能。
3)、可以为系统自带的类扩充功能。
1*)为每个对象扩展一个show的方法。
类扩展;;
1)、可以为某个类扩充一些私有的成员变量和方法;。
2)、写在 .m文件中。
3)、英文名 class Extension。
书写格式:
@interface 类名()
@end
注:如果方法在 .m文件中有具体的实现,但是在 .h文件中没有声明,那么对于外部来说这个文件变成了私有的,外部无法访问的。
3、Block 代码段;(数据类型)
作用:1,用来保存一段代码,在某一个恰当的时间调用。
2、功能上类似函数和方法。
格式:
返回值类型 (^bolck变量名)(型参列表)=^(型参列表);
当调用block保存的代码时 可以 block变量名(实参);
当使用typedef定义block时
typedef 返回值类型(^block类型名称)(型参列表);
block默认下不能修改外面的局部变量,如果必须要修改可以用__block来修饰该变量。
注意:在调用block时必须先判断nil,否则会报错。
4、Protocol 协议
作用:1、用来声明一些方法。
2、一个Protocol是由一系列的方法声明组成的。
注:任何类只要遵守了Protocol,就相当拥有了Protocol的所有方法。
Protocol的定义格式
@protocol 协议名称;
@end
类遵守协议
@interface 类名:父类名<协议名称1,协议名称2>
•协议中有2个关键字可以控制方法是否要实现(默认是@required,在大多数情况下,用途在于程序员之间的交流)
Ø@required:这个方法必须要实现(若不实现,编译器会发出警告)
Ø@optional:这个方法不一定要实现
注意:代理设计的目的;
- 解耦(主类不再依赖特定的某个类型,而是依赖代理,而很多类型都可以作为代理)。
- 增加了程序的灵活性、可扩展性。
Protocol(协议)是实现代理的一种手段。
补充:
-1、有时候很难抽象共同的父类。
-2、类只能但继承。