/*
Objective-c ARC机制
1> ARC机制概述:
ARC,即Automatic Reference Counting,自动引用计数器.ARC是LLVM3.0的一项特性,解决了手动管理内存的麻烦.
在ARC机制下,永远不需要写retain,release,autorelease,永远不需要手动的调用dealloc这几个关键字,这是ARC的最基本原则.
ARC是LLVM3.0的一项特性,解决了手动管理内存的麻烦.当ARC开启的时候,编译器会自动的在适当的地方插入retain,release,autorelease代码.
2> ARC机制下,对象是如何被释放的.
本质:当对象的引用计数器的值是0的时候,自动释放.
ARC:在ARC机制下,永远不需要写retain,release,autorelease,编译器会自动的在适当的地方插入retain,release,autorelease代码.
表象:一个对象只要没有强指针指向,这个对象就会被立即会收掉.
3> 强指针和弱指针
强指针:默认情况下,我们声明一个指针就是强指针.也可以使用__strong来修饰声明的指针是强指针.
例:__strong YYPerson *xiaoming;
弱指针:使用__weak标识的指针就叫做弱指针.
例:__weak YYPerson *xiaoming;
在ARC机制下,一个对象只要没有强指针指向,这个对象就会被立即会收掉.
*/
#import
#pragma mark -
//人类的声明
@interface YYPerson : NSObject
@property NSString *name;
- (void)run;
//自定义构造方法
- (instancetype)initWithName:(NSString *)name;
+ (instancetype)personWithName:(NSString *)name;
@end
//人类的实现
@implementation YYPerson
//重写dealloc监视对象的回收
- (void)dealloc
{
NSLog(@"%@释放了", _name);
}
- (void)run
{
NSLog(@"%@在跑步!", _name);
}
//自定义构造方法
- (instancetype)initWithName:(NSString *)name
{
if(self = [super init])
{
self.name = name;
}
return self;
}
+ (instancetype)personWithName:(NSString *)name
{
return [[self alloc]initWithName:name];
}
@end
#pragma mark -
int main(int argc, const char * argv[]) {
//创建人对象并初始化
YYPerson *xiaoming = [[YYPerson alloc ]initWithName:@"小明"];
//调用方法
[xiaoming run];
return 0;
}