OC学习总结(二)
2014-12-01 00:48
141 查看
OC学习总结(二) (一)内存管理 内存管理规范: 1、只要调用了alloc,必须有release(autorelease) 2、set方法的代码规范 1>基本数据类型:不需要内存管理,直接赋值 - (void) setSpeed:(int) speed { _speed = speed; } 2>OC对象类型 - (void) setCar:(Car *) car { //判断传进来的对象是否是当前正在使用的对象 if (car != _car) { //对当前正在使用的车进行一次release(计数器减1) [_car release]; //对新车进行一次retain操作 _car = [car retain]; } } 3、dealloc方法的代码规范(不要直接调用dealloc方法) 1>一定要[super dealloc],并且放到最后面 2>对self(当前)所拥有的其他对象做一次release - (void) dealloc { //Person对象被回收之前对正在使用的对象进行一次release(计数器减1) [_car release]; NSLog(@"person对象被回收了"); [super dealloc]; } @property参数分类 1、内存管理相关参数 retain:release旧值,retain新值(适用于OC对象类型) assign:直接赋值(默认,适用于非OC对象类型) copy:release旧值,copy新值 2、是否生成set方法 readwrite:同时生成setter和getter方法的声明和实现(默认) readonly:只会生成getter方法的声明和实现(只读,一般用于不可修改的成员变量,如,人名、学号等) 3、多线程管理 nonatomic:性能高(一般就用这个) atomic:性能低(默认) 4、setter和getter方法的名称 setter:决定了setter方法的名称,一定要有冒号 : getter:决定了getter方法的名称(一般用于BOOL类型) ARC原理:无强指针指向的对象,就会释放内存回收对象 指针分两种:1、强指针 __strong(默认情况下,所有指针都是强指针) 2、弱指针 __weak 循环引用解决方案:一端用strong,另外一端用weak,weak就是为循环引用准备的(ARC) 一端用retain,一端用assign (无ARC) (二)Block(类似C语言中指向函数的指针) #import <Foundation/Foundation.h> // 利用typedef定义block类型,感觉跟指向函数的指针类似,就是把变量标识给换了。。。 // typedef int (*MyPoint)(int, int); typedef int (^MyBlock)(int, int); int main(int argc, const char * argv[]) { int a = 10; __block int b = 20; //无参数(可以省略右边^旁边的()号) void (^block)() = ^ { //a = 20; block内部不能直接修改外部的局部变量,写出来就直接报错了。。。 //在变量前面加上__block关键字后,block内部便可修改了 b = 8; //block内部可以直接访问外部的局部变量 NSLog(@"a = %d", a); NSLog(@"b = %d", b); }; block(); //有参数 void (^printLine)(int) = ^(int n) { for (int i=0; i<n; i++) { NSLog(@"------------------"); } }; printLine(5); //用block类型定义一个block变量然后实现它 MyBlock sumBlock = ^(int a, int b) { return a + b; }; NSLog(@"a + b = %d", sumBlock(10, 8)); return 0; } (三)Protocol(协议,类似java中的接口(interface)) /* 1、使用场合 代理设计模式 2、基本用途 》可以用来声明一大堆方法(不能声明成员变量,这点跟Category(分类)一样) 》只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 》只要父类遵守了某个协议,就相当于子类也遵守了 3、协议中有两个关键字可以控制方法是否需要实现(默认是@required),在大多数情况下,用于程序员之间的交流(比如A写了某个协议给B用,B去实现的时候,如果有需要实现的方法而未实现,就会出现警告,B就知道这些方法是A想让他实现的) 4、协议遵守协议 》一个协议可以遵守其他多个协议,多个协议之间用逗号,隔开 》一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明 @protocol 协议名称<协议1, 协议2> */ #import <Foundation/Foundation.h> //Protocol(协议)的定义格式 @protocol MyProtocol <NSObject> //基协议,类似继承中的基类NSObject,一般都会遵守基协议 //默认需要实现,不然会有警告 - (void) test1; //需要实现,不然会有警告 @required - (void) test2; //实现与否均可,不会有警告 @optional - (void) test3; @end //实现与否均可,不会有警告 @optional - (void) test3; @end //需要实现,不然会有警告 @required - (void) test2; //实现与否均可,不会有警告 @optional - (void) test3; @end |
相关文章推荐
- ios_oc学习总结
- OC学习总结之面向对象和类
- 黑马训练营--IOS学习---OC语言学习总结1
- 黑马程序员之ios学习总结——09 OC语言的点语法、@property和@synthesize
- OC学习总结之延展类目协议
- oc学习总结 oc和c语法上的区别
- OC学习篇之---总结和学习目录
- 黑马训练营--IOS学习---OC语言学习总结3
- 黑马训练营--IOS学习---OC语言学习总结2
- 【OC学习-29】单例设计模式的理解、案例和简单总结
- 黑马程序员之ios学习总结——11 OC语言的内存管理1
- ios 学习之OC语言总结1
- 黑马程序员——OC学习总结14-16
- OC-0724学习总结
- 【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结
- OC学习总结之KVC KVO 通知
- 黑马程序员——OC学习总结6-8
- OC基础知识点的总结(全),学习OC的日记
- 黑马训练营--IOS学习---OC语言学习总结3
- 黑马程序员之ios学习总结——12 OC语言的内存管理2