下面代码表明, 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