Objective-C - ARC(Automatic Reference Counting)自动引用技术详解

ARC特点与判断准则

/*
 ARC的判断准则:只要没有强指针指向对象,就会释放对象

 1.ARC特点
 1> 不允许调用release、retain、retainCount
 2> 允许重写dealloc,但是不允许调用[super dealloc]
 3> @property的参数
  * strong :成员变量是强指针(适用于OC对象类型)
  * weak :成员变量是弱指针(适用于OC对象类型)
  * assign : 适用于非OC对象类型
 4> 以前的retain改为用strong

 指针分2种:
 1> 强指针:默认情况下,所有的指针都是强指针 __strong
 2> 弱指针:__weak

 */

int main()
{
    Dog *d = [[Dog alloc] init];

    Person *p = [[Person alloc] init];
    p.dog = d;

    d = nil;

    NSLog(@"%@", p.dog);

    return 0;
}

void test()
{
    // 错误写法(没有意义的写法)
    __weak Person *p = [[Person alloc] init];

    NSLog(@"%@", p);

    NSLog(@"------------");
}
@class Dog;

@interface Person : NSObject

@property (nonatomic, strong) Dog *dog;

@property (nonatomic, strong) NSString *name;

@property (nonatomic, assign) int age;

@end
@implementation Person

- (void)dealloc
{
    NSLog(@"Person is dealloc");

    // [super dealloc];
}

@end
@interface Dog : NSObject

@end
@implementation Dog
- (void)dealloc
{
    NSLog(@"Dog is dealloc");
}
@end

ARC循环引用问题


/**
 *   当两端循环引用的时候,解决方案:
 1> ARC
 1端用strong,另1端用weak

 2> 非ARC
 1端用retain,另1端用assign
 */
int main()
{
    Person *p = [[Person alloc] init];

    Dog *d = [[Dog alloc] init];
    p.dog = d;
    d.person = p;

    return 0;
}
@class Dog;

@interface Person : NSObject

@property (nonatomic, strong) Dog *dog;

@end
@implementation Person

- (void)dealloc
{
    NSLog(@"Person--dealloc");
}

@end
@class Person;

@interface Dog : NSObject

@property (nonatomic, weak) Person *person;

@end
@implementation Dog
- (void)dealloc
{
    NSLog(@"Dog--dealloc");
}
@end
时间: 2024-10-11 23:19:29

Objective-C - ARC(Automatic Reference Counting)自动引用技术详解的相关文章

Swift-自动引用计数(Automatic Reference Counting)(十四)

前言 在iOS5之后apple推出了相对于MRC(Mannul Reference Counting)的ARC(Automatic Reference Counting)的内存管理机制,前者是对内存的手动管理,后者是系统对内存的智能化管理.其实我学习iOS的时候已经推出到iOS7了,对于MRC机制我甚至连一知半解都算不上.有时候和iOS老司机交流的时候他们对于各种内存都很熟悉,感觉包括我在内的很多最近两年刚学习iOS开发的同学,都属于填鸭式的学习吧,知其然不知其所以然,甚至都没耐心去读优秀的源码

ARC(Automatic Reference Counting )技术概述

此文章由Tom翻译,首发于csdn的blog 转自:http://blog.csdn.net/nicktang/article/details/6792972 Automatic Reference Counting (ARC) 是一个编译期的技术,利用此技术可以简化Objective-C编程在内存管理方面的工作量. 这里我把此技术翻译为自动内存计数器管理技术,下图是使用和不使用此技术的Objective-C代码的区别. ARC技术是随着XCode4.2一起发布的,在缺省工程模板中,你可以指定你

对照Java学习Swift--自动引用计数(Automatic Reference Counting)

自动引用计数(Automatic Reference Counting)简称ARC,是Swift对应用程序内存的跟踪和管理.跟Java里面的Gc类似,但是又不太一样. ARC是实例的引用数为0,ARC就会销毁这个实例. GC是当程序不能访问这个实例,称为该实例"不可达的",GC就会负责回收这些"不可达的"的实例,回收算法很复杂,Java规范对GC的很多行为都没有进行严格的规定,不同的厂商在各自实现的Jvm上都有不同的实现. ARC需要开发者保证实例不再被任何属性.常

Xcode编译器特性:ARC(Automatic Reference Counting)

一.         基本简介 ARC是自iOS 5/Mac OS X 10.7之后增加的新特性,消除了原先手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器.因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化 简单地理解ARC,就是通过指定的语法,让编译器(LL

does not support Objective-C Automatic Reference Counting (ARC)

iOS开发 JSonKit does not support Objective-C Automatic Reference Counting(ARC) 有使用JSonKit的朋友,如果遇到"JSonKit does not support Objective-C Automatic Reference Counting(ARC)"这种情况,可参照如下方法: 点击项目根目录->targets->Build Phases->JSONKit.m->添加"-

JSONKit does not support Objective-C Automatic Reference Counting(ARC) / ARC forbids Objective-C objects in struct

当我们在使用JSONKit处理数据时,直接将文件拉进项目往往会报这两个错“JSONKit   does not support Objective-C Automatic Reference Counting(ARC)”,“ARC forbids Objective-C objects in struct”,这是由于JSONKit库未更新,不支持ARC机制.我们可以参照如下步骤解决:

iOS开发 JSonKit does not support Objective-C Automatic Reference Counting(ARC)

有使用JSonKit的朋友,如果遇到“JSonKit does not support Objective-C Automatic Reference Counting(ARC)”这种情况,可参照如下方法: 点击项目根目录->targets->Build Phases->JSONKit.m->添加“-fno-objec-arc”字段,在运行就OK了.

长路漫漫,唯剑作伴--Automatic Reference Counting

一.简介 ARC,自动引用计数,是指iOS的内存管理使用引用计数的技术. 在OC中采用Automatic Reference Counting的机制,让编译器进行内存管理.在新一代的Apple LLVM编译器中设置ARC为有效状态,就不用再次键入retain.release代码,这在降低程序崩溃.内存泄漏等风险的同时,很大程度上减少了开发程序的工作量.编译器完全清楚目标对象,并能立刻释放那些不再被使用的对象(有待斟酌).如此一来,应用程序将具有可预测性,且运行流畅,速度也将大幅提升.(摘自苹果官

[转]关于NSAutoreleasePool' is unavailable: not available in automatic reference counting mode的解决方法

转载地址:http://blog.csdn.net/xbl1986/article/details/7216668 Xcode是Version 4.2 Build 4D151a 根据Objective-c 2.0程序设计上的旧版本的代码会发生NSAutoreleasePool' is unavailable: not available in automatic reference counting mode的错误 需要手动关闭工程中ARC 工程中 Build Settings--->Apple