pragma mark 集合中对象的内存管理
pragma mark 概念
/**
1.如果将一个对象添加到数组中, 那么数组 会对象 进行一次 retain
2.当数组 移除一个对象之后, 会给这个对象 发送一条release消息
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
#pragma 集合中对象的内存管理
@autoreleasepool {
#warning 1.如果将一个对象添加到数组中, 那么数组 会对象 进行一次 retain
Person *p = [Person new];
NSLog(@"retainCount = %lu",[p retainCount]);
// NSMutableArray *arrM = [NSMutableArray array]; // 这里不需要释放 因为使用的是类工厂方法创建 默认都加上了autorelease
NSMutableArray *arrM = [[NSMutableArray alloc]init]; // 只有使用alloc 、new 这些 对象方法 才需要 release
[arrM addObject:p];
NSLog(@"retainCount = %lu",[p retainCount]);
[p release];
NSLog(@"retainCount = %lu",[p retainCount]);
// 当数组对象释放之后, 会给数组中 所有的对象 发送一条release 消息
[arrM release];
#warning 2.当数组 移除一个对象之后, 会给这个对象 发送一条release消息
Person *p1 = [Person new]; // 1
NSLog(@"retainCount = %lu",[p1 retainCount]);
NSMutableArray *arrM1 = [[NSMutableArray alloc]init];
[arrM1 addObject:p1]; // 2
NSLog(@"retainCount = %lu",[p1 retainCount]);
[p1 release]; // 1
// 当数组 移除一个对象之后, 会给这个对象 发送一条release消息
[arrM1 removeObject:p1];
}
return 0;
}