一、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的自动释放的对象。