OC学习总结(二)
来源:互联网 发布:房屋平面图制作软件 编辑:程序博客网 时间:2024/05/24 05:23
内存管理规范:
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
- OC学习总结(二)
- OC学习总结(二)
- OC学习总结(一)
- OC学习总结(一)
- OC学习总结(三)
- oc 知识总结二(NSArray、NSMutableArray)
- OC学习笔记二(点语法)
- OC -基础(二) 学习中。。。
- OC-0724学习总结
- OC学习总结
- OC学习总结
- oc学习总结
- oc学习总结2
- OC学习总结
- oc学习总结 多态
- OC学习知识点总结
- OC内存管理总结二:
- OC总结二JSON解析
- iPhone消息通知
- java中try和finally
- 钟仰新-软件工程-迭代一总结
- NOIP2014day1T2联合权值新版题解(优化的邻接表)
- Core data 使用(二)
- OC学习总结(二)
- @synthesize和@dynamic区别
- eclipse快捷键
- Android中100行代码实现可上下拉动的自定义ListView
- hibernate缓存机制
- nginx负载均衡配置
- 如何提升自己的技术/能力——兴趣篇
- NYOJ-109 数列转换 AC
- QT5.3的中文乱码问题