ARC机制
// #import @interface Person : NSObject @end // #import "Person.h" @implementation Person - (void)dealloc { // // } @end // //ARC简单,不用程序员在去管理内存 //1.强指针 Strong //2.弱指针 weak //只要有强指针指向一个对象,那么系统就不会回收该对象 //只要没有强指针指向对象,系统立即回收该对象 //弱指针不影响,对象被回收 //默认情况下,所有的指针都是强指针类型 #import #import "Person.h" void test(Person * v)//Person * v = { }// int main(int argc, const char * argv[]) { } |
ARC机制下组合关系(strong weak)
// #import @interface Car : NSObject @end // #import "Car.h" @implementation Car - (void)dealloc { } @end // // 本文件重在说明strong 和Weak的区别: // 可以这样理解:Strong 指针会使所指对象引用计数加一,而weak不会,它只是普通指针。因此 // #import #import "Car.h" @interface Person : NSObject //@property(nonatomic,retain)Car * car; //ARC机制 strong 对象,手动内存管理的retain关键字,(一定能够都是应用在对象类型变量上) //ARC机制中的 weak 对象手动内存管理的assign关键字,(一定能够都是应用在对象类型变量上) @property (nonatomic,strong)Car * car;//强直阵类型的对象,会影响对象回收 @property (nonatomic,weak)Car * car2;// 弱指针类型的对象,不会影响对象的回收 //@property (nonatomic,assign)Car * car3;//造成迷惑,会导致许多程序员搞不清这个变量到底是stong类型的还是weak类型 @property (nonatomic,strong)NSString * name; @property (nonatomic,strong)NSString * idCard; //ARC机制下 基本数据类型的@property参数使用,与手动内存管理完全一致 @property (nonatomic,assign)int age; @end // #import "Person.h" @implementation Person -(void)dealloc { } @end // #import int main(int argc, const char * argv[]) { } |
ARC类循环应用问题
// #import #import "Car.h" @interface Person : NSObject @property (nonatomic,strong)Car * car; @end // #import "Person.h" @implementation Person -(void)dealloc { } @end // #import //#import "Person.h" @class Person; @interface Car : NSObject //@property (nonatomic,strong)Person * p; //当出现类循环应用的时候,只需要把一方面的Strong引用改为weak,并且在.h文件中使用@class 类名的方式,通知.h文件类的存在 @property (nonatomic,weak)Person * p; @end // #import "Car.h" #import "Person.h" @implementation Car - (void)dealloc { } @end // #import #import "Person.h"; int main(int argc, const char * argv[]) { } |