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];
}
一、协议
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];
}
相关文章推荐
- 逆向最大匹配分词算法C#
- JAVA 数组作业——动手动脑以及课后实验性问题
- surf特征点检测
- hdu5524
- jquery+ajaxc回调函数内使用$(this)并不能正确找到对象的解决办法
- python PEP8编码规范及问题整理(一)
- 如何统计每个用户发表的各类文章数量
- 狄利克雷传记资料(2011-01-14 22:55:48)
- OC第六天:Block、数组⾼级
- UIView视图
- Crack JD.COM Shop Cart
- Surround the Trees(凸包求周长)
- The Stanford 3D Scanning Repository
- UVa 12112 - Iceman
- android开源项目和框架
- 【SQL】遍历辖区表,并按祖父子顺序展示
- assert是一个预处理宏
- ssoj2472遇险
- iOS 框架和服务
- #1116 : 计算