5、内存管理(自定义MyArray)-OC
来源:互联网 发布:windows qt安装包下载 编辑:程序博客网 时间:2024/06/10 23:52
站在数组上,看怎来使用retain、release
(1)了解NSMutableArray如何实现
(2)进一步深入内存管理
(1)了解NSMutableArray如何实现
NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i=0;i<10;i++)
{
Dog *dog = [[Dog alloc] init];
[dog setID:i];
[array addObject:dog];//里面有用到retain引用,所以dog计数器会变成2
[dog release];//所以这个dog没有释放
}
for(Dog *d in array)
{
NSLog(@"dog is %d",[d ID]);
}
[array release];//将数组中所有的dog 和 array 释放掉
实现数组提供的方法:
(1)(void)addObject:(id)object;
(2)(id) objectAtIndex:(NSUInteger)index;
(3)(void) removeObjectAtIndex:(NSUInteger)index;
(4)(void)removeAll;
(2)进一步深入内存管理
//视频5 main.m#import <Foundation/Foundation.h>#import "Dog.h"int main( int argc, const char * argv[] ){@autoreleasepool{#if0NSMutableArray * array = [[NSMutableArray alloc] init];for(int i=0;i<10;i++){Dog *dog = [[Dog alloc] init];NSLog(@"dog retainCount is %ld\n",[d retainCount]);[dog setID:i];[array addObject:dog];//里面有用到retain引用,所以dog计数器会变成2NSLog(@"dog retainCount is %ld\n",[d retainCount]);[dog release];//所以这个dog没有释放}for(Dog *d in array){NSLog(@"dog is %d",[d ID]);}[array release];//将数组中所有的dog 和 array 释放掉#endifMyArray * array = [[MyArray alloc] init];for(int i=0;i<10;i++){Dog *dog = [[Dog alloc] init];NSLog(@"dog retainCount is %ld\n",[d retainCount]);[dog setID:i];[array addObject:dog];//里面有用到retain引用,所以dog计数器会变成2NSLog(@"dog retainCount is %ld\n",[d retainCount]);[dog release];//所以这个dog没有释放}[array release];}return 0;}
//Dog.h#import <>@interface Dog : NSObject{int _ID;}@property (assign) int ID;@end
//Dog.m#import "Dog.h"@implementation Dog@synthesize ID=_ID-(void) dealloc{NSLog(@"dog is %d dealloc\n",_ID);[super dealloc];}@end
//MuArray.h#import <>@interface MyArray: NSObject{NSUInteger _count;//数组当前有几项元素,是一个整数id _objs[512];//创建一个512的数组,有4x512字节}@property (assign, readonly) NSUInteger count;//往MyArray加入一项元素- (void)addObject:(id)object;//取得第index项元素- (id) objectAtIndex:(NSUInteger)index;//删除第index项元素- (void) removeObjectAtIndex:(NSUInteger)index;//删除所有元素- (void)removeAll;@end
//MuArray.m#import "Dog.h"@implementation Dog@synthesize count = _count;- (id) init{self = [super init];if(self){_count = 0;}return self;}//往MyArray加入一项元素- (void)addObject:(id)object{if(_count >= 512)return;_objs[_count] = [object retain];_count ++;//这里必须要做[object retain]}//取得第index项元素- (id) objectAtIndex:(NSUInteger)index{return _objs[index];}//删除第index项元素- (void) removeObjectAtIndex:(NSUInteger)index{id obj = _objs[index];[obj release];_objs[index] = nil;}//删除所有元素- (void)removeAll{for(int i=0;i<_count;i++){[self removeObjectAtIndex:i];}}-(void) dealloc{[self removeAll];NSLog(@"remove all\n");[super dealloc];}@end
0 0
- 5、内存管理(自定义MyArray)-OC
- OC基础-内存管理(二)MyArray解释addObject原理
- 第五讲:Obj-C 内存管理3 - 自定义MyArray
- 自定义MyArray()
- 自定义队列MyArray
- OC基础教程5-内存管理
- OC 内存管理(1)
- OC内存管理(ARC)
- OC--内存管理(1)
- OC--内存管理(2)
- OC内存管理(一)
- 类模板MyArray-动态内存
- OC内存管理-OC笔记
- 黑马程序员 OC语言 - 5 内存管理
- OC第四课(内存管理)
- oc学习笔记(八)内存管理
- 黑马程序员-----OC内存管理(一)
- 黑马程序员-----OC内存管理(二)
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值及用setsockopt()来控制recv()与send()的超时
- 数据库_jdbc_入门
- 某公司面试题(2013-12-18)
- 人脸识别必读的N篇文章
- mysql忘记root密码怎么办
- 5、内存管理(自定义MyArray)-OC
- QQ群功能设计与心理学
- 17周项目二(7)(比较字符串)(用指针作参数)
- ASP.NET初了解(一)--Html控件和Web控件
- Linux查看系统硬件信息
- 人脸检测
- 无法打开包括文件:“dirent.h”
- 语音识别系统:有免费实用的"语音到文字"的软件么?
- 给java工程添加hession