1.快速初始化一个对象,并且加入自动释放池。
1)自定义构造方法:1>先初始化父类,并判断是否初始化成功。2>初始化子类。3>返回self。
-(instancetype) initWithName: ( NSString * ) name
{
//自定义构造方法
// 先初始化父类的,并判断是否成功
if(self=[super init])
{// 初始化子类的,赋值
_name=name;
}
//返回self
return self;
}
+(instancetype) personWithName:(NSString * ) name
{
return [[[self alloc] initWithName:name] autorelease];
}
调用的时候
{
//在autoreleasepool(自动释放池)中使用如下代码:
Person * p=[[Person alloc] initWithName:@"name"]//未加入到自动释放池。
Person * p =[Person personWithName:@"name"];
}
1>ARC是编译器特性,编译器在合适的地方加入release ,autorelease ,retain 。底层其实还是MRC。
2>ARC判断原则:当一个对象没有强指针指向的时候,对象就会被释放。_ _weak *p=[person new] 。此为创建一个弱指针。
3>循环strong问题:与MRC中的循环retain问题一样,此时应该一个strong ,另外一个使用weak。
4>MRC代码兼容ARC:-fno-objc-arc 不使用ARC,-f-objc-arc 使用ARC ,在ARC项目中可以使用MRC的类。
4.分类 Category
1>分类的作用:将一个类的不同方法分到不同的文件中存储,便于对类进行模块化设计,以及团队合作开发。
可以在不修改源文件的基础上,为这个类扩充一些方法。
注意:!!! 分类中只能增加方法,无法增加实例变量。 分类中可以访问原类的实例变量。
2>主类,分类调用优先级的问题:主类,分类同时有一个同名方法时,优先调用分类的。当有多个文件含有同名方法时, 文件编译越晚,调用优先级越高。
3> 非正式协议:给NSObject 类或者它的子类,也就是Foundation框架中提供的类增加的分类,就是非正式协议。
4>延展,延展类别,扩展:
类扩展在新的 .h文件中,为原类,增加实例变量和方法,此处为相对私有变量,相对私有方法。只能在类的内部去调用。
注意:::类扩展的方法,无法被子类继承!!!!
类扩展与分类的区别:类扩展没有分类名称,所以也有人称之为:匿名分类。