Penson *p=[[Penson alloc] init];
[p retain];
NSLog(@"%ld",[p retainCount]);
[p release];
[p release];
p=nil;
NSLog(@"%ld",[p retainCount]);
*/
/*
Penson *p1=[[Penson alloc] init];
[p1 retain];
NSLog(@"%ld",[p1 retainCount]);
[p1 autorelease];
NSLog(@"%ld",[p1 retainCount]);
[p1 autorelease];
NSLog(@"%ld",[p1 retainCount]);
//内存中会出现的问题:内存溢出,野指针.
//gc:垃圾回收机制.可以自动判断那些内存是不在使用的,由系统帮助我们回收.
//MRC:手动内存管理,也叫手动引用计数,由我们自己判断哪块内存还在使用,同时判断有多少人在使用,当引用计数为0的时候,内存释放.同时指针置空(防止野指针)
//ARC:自动内存管理,也叫自动引用计数,当我们需要引用计数减一时,由编译器帮我们添加release语句.
//OC提供了垃圾回收机制.但是IOC并未采用.
//MACOC 10.8之前使用垃圾回收机制, 10.8之后弃用.
//关于引用计数的一些方法
//+alloc:开辟内存,设置引用计数为1
//-retain:使引用计数 +1
//-copy:将内存或对象复制 一份,并将x复制的内存或对象引用计数置 1 .
//-release:使引用计数 -1 .
//-autorelease:使引用计数 -1 .只不过是在出自动释放池之后才执行 -1 操作.
//-dealloc: 当引用计数为0时,由系统自动调用释放空间.
//自动释放池,有两种形式:
//第一种:@autorelease{}
//第二种:
/*
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
[poor release];
*/
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
Penson *p1=[[Penson alloc] init];
[p1 retain];
NSLog(@"%ld",[p1 retainCount]);
// [p1 autorelease];
// NSLog(@"%ld",[p1 retainCount]);
[p1 autorelease];
NSLog(@"%ld",[p1 retainCount]);
[pool release];
@autoreleasepool {
Person *p=[[Person alloc] init];
NSNumber *mayage=[[NSNumber alloc] initWithInt:18];
NSString *s=[[NSString alloc] initWithString:@"xiaoA"];
p.age=mayage;
NSLog(@"%@",p.age);
p.name=s;
[s release];
[mayage release];
[p release];
Student *stu=[[Student alloc] init];
NSString *s1=[[NSString alloc] initWithString:@"xiaocai"];
stu.name=s1;
NSNumber *n1=[[NSNumber alloc] initWithInt:16];
stu.num=n1;
NSLog(@"%@,%@",stu.name,stu.num);
[stu release];
[s1 release];
[n1 release];
}
//举例