NSMutableArray类addObject方法对对象retainCount的影响 --在MRC下
2015-07-27 19:48
621 查看
下面代码表明, NSMutableArray类的addObject方法,执行的时候,好像是首先申请一个指针变量内存,然后将对象的地址赋值给这个指针变量,再把这个指针变量作为一个节点添加到数组的元素地址链表中。
在形式上,NSMutableArray类的addObject方法,对同一个对象执行了m次,则这个对象的retainCount会加上m,如下面代码所示:
#import <Foundation/Foundation.h>
int main(int argc,const
char * argv[])
{
NSAutoreleasePool *pool =[NSAutoreleasePool
new];
NSMutableString *mstr=[NSMutableString
stringWithString:@"hello world"];
NSMutableArray *mar=[NSMutableArray
new];
printf("%lu\n",[mstr
retainCount]); //输出1
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出2
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出3
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出4
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出5
printf("下面开始输出所有的数组元素,数组的元素个数为: %lu\n",mar.count);
//输出5
for(NSMutableString *mstrTemp
in mar)
printf("%s\n",[mstrTemp
UTF8String]);
[pool drain];
}
输出结果为:
1
2
3
4
5
下面开始输出所有的数组元素,数组的元素个数为: 4
hello world
hello world
hello world
hello world
在形式上,NSMutableArray类的addObject方法,对同一个对象执行了m次,则这个对象的retainCount会加上m,如下面代码所示:
#import <Foundation/Foundation.h>
int main(int argc,const
char * argv[])
{
NSAutoreleasePool *pool =[NSAutoreleasePool
new];
NSMutableString *mstr=[NSMutableString
stringWithString:@"hello world"];
NSMutableArray *mar=[NSMutableArray
new];
printf("%lu\n",[mstr
retainCount]); //输出1
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出2
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出3
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出4
[mar addObject:mstr];
printf("%lu\n",[mstr
retainCount]); //输出5
printf("下面开始输出所有的数组元素,数组的元素个数为: %lu\n",mar.count);
//输出5
for(NSMutableString *mstrTemp
in mar)
printf("%s\n",[mstrTemp
UTF8String]);
[pool drain];
}
输出结果为:
1
2
3
4
5
下面开始输出所有的数组元素,数组的元素个数为: 4
hello world
hello world
hello world
hello world
相关文章推荐
- iOS Objective-C @property属性的用法
- Objective-C 省市区 字典 封装
- Object-C 面向对象的三大特征
- Android中Intent传递Object和ArrayList<Object>对象---笔记
- Json date from object error
- Sybase ASE:Can't allocate space for object in database 'tempdb' because 'default' segment is full
- SuperMap iObjects .NET 制作2.5D数据详解(一)
- objective-C中category与extension的探究——关于extension(类扩展)的实验和总结
- Object-C文件的读写
- Objective-C中@property的所有属性详解
- OC学习
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- ubuntu安装jdk之后,报错java/lang/NoClassDefFoundError: java/lang/Object的解决办法
- 摇身一变,从C++程序员变成Objective-C程序员:快速实用指南
- Object-C 便利构造器
- Iterator迭代器、Comparable、Comparator比较器
- Entity Framework 出现 "此 ObjectContext 实例已释放,不可再用于需要连接的操作" 的错误 原因
- [置顶]Swift 与 Object-C 交互 (Swift版本为:1.2)
- ios开发-Object-C可变参数函数
- iOS开发-Object-C Block的实现方式