黑马程序员--IOS_学习笔记_内存管理_@autorelease


------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、autorelease

知识点:当一个类对象声明的时候带有autorelease,并且放在了OC中的自动释放池里了。程序员就不需要管理对象什么时候需要release,什么时候释放了。


1.当释放池被销毁时,会向池里面的所有对象发送release消息,这样释放池里面的所有对象都被销毁了。

@autorelease

{

  Car *car = [[[Car alloc] init] autorelease];  

}


2.autorelease 不是自动释放,只是把对象放到自动释放池里面。等释放池被销毁是才会释放里面所有对象。所以大的特别占用资源的对象不适合释放池,应该手动释放来精确控制。


问题:当一个对象时候通过Car *car = [[[Car alloc] init] autorelease];   这种方式创建的,就不需要 [car release];  因为对象已经被释放了。计数器是0,car相当与是指向了一个不存在的对象。


二、返回类对象的类方法

1.示例声明

@interface User : NSObject

@property (nonatomic,  assign,  readwrite) int age;

+ (id) user;

+ (id) userWithAge:(int)age;

@end // User


2.实现

@implementation User 

+ (id) user

{

return [[[self alloc] init] autorelease];

}


+ (id) userWithAge:(int)age

{

User *user =  [[[self alloc] init] autorelease];    // 使用self的好处,是 调用当前方法的对象,谁调用指向谁,好处,如果是User类的子类,不用自己强制转换了。

user.age = age;

return user;


}


@end // User

当一个类是通过 上面的方式创建的。

就可以  User *user = [User user];  这样来创建,减少代码长度。

也可以在创建的时候给年龄赋值。  如:User *user = [User userWithAge:18]; 这样就创建了年龄还是18的自动释放的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值