前言
autorelease的规范:
0)创建对象,将对象存储到自动释放池之中,就不需要再去手动的release。
一、一般情况下,写1个类,会为我们的类写1个类方法,用来让外界调用类方法来快速的得到1个对象
例如:有一个Pig类:
@interface Pig : NSObject
@property(nonatomic,retain)NSString *name;
@property(nonatomic,assign)int age;
@property(nonatomic,assign)float weight;
– (instancetype)initWithName:(NSString *)name andAge:(int)age andWeight:(float)weight;
++(instancetype)pig;
++(instancetype)pigWithName:(NSString *)name andAge:(int)age andWeight:(float)weight;
@end
@implementation Pig
– (void)dealloc
{
NSLog(@“猪挂了。。。”);
[_name release];
[super dealloc];
}
– (instancetype)initWithName:(NSString *)name andAge:(int)age andWeight:(float)weight
{
if(self = [super init])
{
self.name = name;
self.age = age;
self.weight = weight;
}
return self;
}
++(instancetype)pig
{
return [[[self alloc] init] autorelease];
}
++(instancetype)pigWithName:(NSString *)name andAge:(int)age andWeight:(float)weight
{
return [[self alloc] initWithName:name andAge:age andWeight:weight];
}
@end
main.m文件中:
#import <Foundation/Foundation.h>
#import “Person.h”
#iimport “Pig.h”
int main()
{
Pig *p1 = [[Pig alloc] initWithName:@“八戒” andAge: 2 andWeight:260.0f];
Pig *p2 = [Pig pigWithName:@“八戒” andAge: 2 andWeight:260.0f];
@autoreleasepool
{
}
}
二、类方法的第一个规范
1.一般情况下,要求提供与自定义构造方法相同功能的类方法,这样可以快速的创建1个对象
例如:NSString *str = [[NSString alloc] initWithFormat:];
[NSString stringWithFormat:];
2.类方法的第二个规范:
我们一般情况下,写1个类,会为我们的类写1个同名的类方法,用来让外界调用类方法来快速的得到1个对象,
规范:使用类方法创建的对象,要求这个对象在方法当中已经被autorelease过了。
这样,我们只要在自动释放池中,调用类方法来创建对象,那么创建的对象就会被自动的加入到自动释放池当中,就不需要再去手动的autorelease了,
使用对象方法创建的对象,不要求auto release过。。。,例如:
– (instancetype)initWithName:(NSString *)name andAge:(int)age andWeight:(float)weight
{
if(self = [super init])
{
self.name = name;
self.age = age;
self.weight = weight;
}
return self;
}
例如:
++(instancetype)pigWithName:(NSString *)name andAge:(int)age andWeight:(float)weight
{
return [[[self alloc] initWithName:name andAge:age andWeight:weight] autorelease];
}
main.m文件中:
@autoreleasepool
{
Pig *p1 = [Pig pigWithName:@“猪猪” andAge: 1 andWeight:100.0f];
}
总结
就是如果通过一个类方法,返回1个当前对象,那这个对象就已经是autorelease过了的,但是,通过对象方法,没有auto release过。
本文详细讲解了Objective-C中的autorelease规则,介绍了如何在类方法中正确使用autorelease以确保对象生命周期管理,并强调了类方法创建对象时自动autorelease的重要性。通过实例和规范说明,帮助开发者理解和应用autorelease的最佳实践。

被折叠的 条评论
为什么被折叠?



