您的位置:首页 > 其它

OC学习 第十一章 协议 内存管理

2015-11-02 19:51 302 查看
OC学习 第十一章 协议 内存管理

一、协议

1.概念:

如果一个类遵守了这个协议(格式为父类名<协议名>),那么必须在.m文件中实现协议中声明的必须实现的方法,可选方法可实现也可不实现,不必在类的.h文件中声明。

@required:表示必须实现的方法;

@optional:表示可选的实现方法;
2.例:

协议文件:

#import
<Foundation/Foundation.h>

//@protocol

协议名<父类名>

@protocol
xieyi <NSObject>

@required//必须实现

-(void)finishTask;

-(void)cantLate;

@optional//可选实现

-(void)wearNice;

@end

student.h文件:

#import
<Foundation/Foundation.h>

#import
"xieyi.h"

@interface
Student :
NSObject<xieyi>(不能忘记)

@end

student.m文件:

#import
"Student.h"

@implementation
Student

-(void)finishTask{

NSLog(@"学生要完成作业");

}

-(void)cantLate{

NSLog(@"学生不能迟到");

}

@end
二、内存管理
1.内存管理机制:

a、alloc retain new copy 会让计数器加1 ,release 会让计数器减1。

b、dealloc 方法用于销毁对象,收回内存。其和 alloc 分配内存对应。dealloc 方法不能被直接调用,而是由系统在销毁对象时调用。retain 和 release 对应。

c、影响引用计数的方法: + alloc -retain -copy -release -autoreleasepool

2.和ARC(自动内存管理)有关的关键字:

strong 变量缺省声明都带

weak 不是对象持有者,然后对象被销毁时被置为nil;

unsafe unretained(不常用)

autorelease(不常用)

ARC/MRC(手动内存管理)混合使用:选择需要ARC的文件双击,并在输入框中输入:-fobjc-arc,如果不要ARC则输入:-fno-objc-arc

3.自动释放池(autoreleasepool):

NSAutoreleasePool
*pool = [[NSAutoreleasePool
alloc]
init];创建一个自动释放池

如果想要给一个对象发送autorelease消息,必须将下面的代码写在创建自动释放池和销毁池之间

[p
autorelease];

只有当自动释放池release时,才会将池里面的对象进行一次release

[pool
release];

NSLog(@"%d",p.retainCount);

[p
retain];

自动释放池,当超出大括号之后,其包含的对象自动release,发送autorelease消息的代码需要放到大括号里

@autoreleasepool{

[p
autorelease];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: