在OC中,使用数组的时候,往往会alloc一个对象后直接就release,这个的原因是在数组里面会调用retain方法来
保持这个对象,所以需要release,基本上使用NSMutableArray对象的都会采用这个方法如下.
NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i = 0; i < 4; i++){
Dog *d = [[Dog alloc] init];
[d setID:i];
NSLog(@"dog reatinCount is %ld",[d retainCount]);
[array addObject:d];
NSLog(@"dog reatinCount is %ld",[d retainCount]);
[d release];
}
[array release];
然后下面我们将自己写一个简单的数组来模拟一下这个数组里面到底进行了什么样的活动,下面代码如下
#import <Foundation/Foundation.h>
@interface MyArray : NSObject
{
NSUInteger _count;//数组当前有几项元素
id _objs[512];//创建了一个512项的数组
}
@property (assign,readonly) NSUInteger count;
- (void) addObject: (id) object;
- (id) objectAtIndex: (NSUInteger) index;
- (void) removeObjectAtIndex : (NSUInteger) index;
- (void) removeAll;
@end
然后是实现文件
#import "MyArray.h"
@implementation MyArray
@synthesize count = _count;
- (id) init
{
self = [super init];
if(self){
_count = 0;
}
return self;
}
- (void) addObject:(id)object
{
if(_count >512)
return;
_objs[_count++] = [object retain];//这里必须retain保证数组里面存放的不是野指针,count++进行下一次存取准备
}
- (id) objectAtIndex:(NSUInteger)index
{
return _objs[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
{
NSLog(@"数组已经释放");
[self removeAll];
[super dealloc];
}
@end
最后是使用这个文件
MyArray * array = [[MyArray alloc] init];
for(int i = 0; i < 4; i++){
Dog * d = [[ Dog alloc] init];
[d setID:i];
NSLog(@"dog reatinCount is %ld",[d retainCount]);
[array addObject:d];
NSLog(@"dog reatinCount is %ld",[d retainCount]);
[d release];
}
[array release];
}
return 0;
然后最后的运行结果如下
2012-10-14 15:06:15.671 MyArray[1098:303] dog reatinCount is 1
2012-10-14 15:06:15.673 MyArray[1098:303] dog reatinCount is 2
2012-10-14 15:06:15.674 MyArray[1098:303] dog reatinCount is 1
2012-10-14 15:06:15.674 MyArray[1098:303] dog reatinCount is 2
2012-10-14 15:06:15.675 MyArray[1098:303] dog reatinCount is 1
2012-10-14 15:06:15.676 MyArray[1098:303] dog reatinCount is 2
2012-10-14 15:06:15.676 MyArray[1098:303] dog reatinCount is 1
2012-10-14 15:06:15.677 MyArray[1098:303] dog reatinCount is 2
2012-10-14 15:06:15.677 MyArray[1098:303] 数组已经释放
2012-10-14 15:06:15.678 MyArray[1098:303] Dog id 0 dealloc
2012-10-14 15:06:15.678 MyArray[1098:303] Dog id 1 dealloc
2012-10-14 15:06:15.679 MyArray[1098:303] Dog id 2 dealloc
2012-10-14 15:06:15.679 MyArray[1098:303] Dog id 3 dealloc
可以看到,所有的内存都已经释放完毕.
分享到:
相关推荐
Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。
NSMutableArray-SafeTransaction NSMutableArray线程安全事务 NSMutableArray不是线程安全的,如果您向每个API添加锁定,则会被包围。... 线程#2删除最后一个对象。 线程#1访问count-1对象,然后引发异常。
下面小编就为大家分享一篇iOS 对NSMutableArray进行排序和过滤的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了IOS 开发之 NSMutableArray与NSArray 的区别的相关资料,希望通过本文能掌握这部分内容,需要的朋友可以参考下
NSMutableArray-Delegate 是为可变数组添加模式委托的类别。 支持的委托方法 - (void)mutableArray:(NSMutableArray *)array willAddObject:(id)object - (void)mutableArray:(NSMutableArray *)array didAddObject...
NSMutableArray +随机播放NSMutableArray上的一个有用的类别,提供了一种重新排列数组的方法。用法在要添加随机播放功能的类中导入NSMutableArray + Shuffle.h文件。 # import " NSMutableArray+Shuffle.h " 创建...
Iphone数组一些基础操作 NSArray/NSMutableArrayIphone
FFSafeKit安全地使用NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSMutableString。 功能安全访问NSArray安全访问NSDictionary安全访问并执行更改FFSafeKit安全地使用NSArray,NSMutableArray,...
本文作者本着学习的态度,决定仿照NSArray和NSMutableArray 自己实现一个数组类型,当然性能可能没有 NSArray和NSMutableArray 的好,插入100000万条数据,时间上是 NSMutableArray 的三倍左右 ,当然平时使用过程中很少...
取出所有的这个动画相关的序列图片,生成一个数组用来存放这些图片 // 1.1生成数组 NSMutableArray *array = [NSMutableArray array]; // 1.2循环生成图片名,根据图片名把图片存入数组 for (int i = 0; i <...
NSMutableArray *dataTitleArray=[[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil]; NSMutableArray *dataArray=[[NSMutableArray alloc] initWithObjects:@"86",@"2...
NSMutableArray *dataTitleArray=[[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil]; NSMutableArray *dataArray=[[NSMutableArray alloc] initWithObjects:@"86",@"2...
快速简单的给你的app加入引导页。 只需要传入几张引导页面图片即可,在您的app的根页面的viewDidLoad中添加如下代码即可: NSMutableArray *images = [NSMutableArray new];[images addObject:[UIImage ...
NSMutableArray *arrayData=[[NSMutableArray alloc] initWithObjects:@"shaosikang1",@"shaosikang2",@"shaosikang3",@"shaosikang4",@"shaosikang5",@"shaosikang6",@"shaosikang7",@"shaosikang8", nil];...
##通过使用NSThread类来讲解iOS中的多线程,创建了12个线程,来下载12张图片,而且把最后一个线程的优先级设置成最高,其他线程在最后一个线程执行完毕之后在执行 ##ViewController.m ###1.点击按钮下载的方法来开始...
仿网易自动循环广告 也可手动滑动 可自定义自动滚动时间间隔 这个例子是从其他地方下的 不过原始代码里存在严重的内容泄露 使用时间长了 会发现滚动缓慢 这个bug 已被我修复 使用方法如下: NSMutableArray ...
获取某个标签的结点个数- (int)nodeCountOfTag:(NSString *)tag { NSString *jsString = [NSString stringWithFormat:@"document.getElementsByTagName('%@').length", tag]; int len = [[self ...
NSMutableArray *controlArray = [[NSMutableArray alloc]init]; for (int i = 0; i ; i ) { ExampleViewController *vc = [[ExampleViewController alloc]initWithIndex:i title:titleArray]; [controlArray...
typedef NS_ENUM(NSInteger, UIMinutesType) { UIMinutesTypeAll = 0, //60秒,每一秒一个数值 UIMinutesTypeHalfHour, //半分钟一个数值 00 30 UIMinutesTypeQuarterHour //15秒一个数值 00 15 30 45 }; 修改...
像这样声明一个伪造的NSMuatbleArray NSMutableArray ( NSString ) *strAry = [[NSMutableArray( NSString ) alloc] init]; NSMutableArray ( NSNumber ) *numberAry = [[NSMutableArray( NSNumber ) alloc] ...