北京网站制作公司兴田德润实力强,wordpress layer,网站开发用户需求,怎么建立简单网站1、简介#xff1a;ARC(Automatic Reference Counting)#xff0c;自动引用计数#xff0c;需要XCode4.2和SDK5.0的支持。它是一个在编译期间工作的技术#xff0c;编译器在编译的时候会根据变量的作用域为objective-c变量添加合适的retain、release、autorelease等函数。原…1、简介ARC(Automatic Reference Counting)自动引用计数需要XCode4.2和SDK5.0的支持。它是一个在编译期间工作的技术编译器在编译的时候会根据变量的作用域为objective-c变量添加合适的retain、release、autorelease等函数。原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成。2、设置XCode为ARC项目在BuildSettings里面名为Objective-C Automatic Reference Counting的键值表示此Target是否使用ARC。值类型为BOOL值。3、ARC的一些规则(1).不能调用如下函数(包含隐式调用)retain、release、retainCount、autorelease。(2).不能调用dealloc。XCode会自动生成delloc方法不能自己实现但是如果必须要实现不能调用[super dealloc]。(3).不能使用NSAllocateObject和NSDeallocateObjdect。(4).不能使用自动释放池NSAutoreleasePool。作为替代使用autoreleasepool{ ... }。(5).不能在c语言结构中使用objective-c指针。(6).禁止以new开头命名的属性变量。4、ARC的一个基本规则只要一个对象被任一strong类型的指针指向那么它将不会被销毁。如果对象没有被任何strong类型的指针指向它将被销毁。5、strong关键字指向对象并且持有它weak关键字指向对象但并不持有它6、当一个对象不被持有时它将被销毁并且所有指向这个对象的weak指针都将被置为nil从而避免了EXE_BAD_ACCESS这个错误。7、默认情况下所有全局变量和局部变量都是strong类型的。8、release方法的自动添加是根据变量的作用域来定的。如果是局部变量方法执行完毕局部变量就释放了如果是全局变量持有此全局变量的对象释放了全局变量也就释放了。虽然不用再调用retain、release但是并不是就什么都不做了。在某些情况下我们仍然需要在合适的地方把strong类型的指针置为nil否则App会很可能发生内存溢出(延迟释放、 内存警告)比如单例或者一直存在的对象持有的时有时无的Strong类型的变量。9、当我们只用一些非ARC项目的代码库时可以设置编译flag使这些代码不使用ARC编译。从而实现ARC和非ARC的代码混编。flag值-fno-objc-arc。在Build Phases-Compile Sources中可以给每一个文件添加此编译值。10、使用ARC时strong、weak、autoreleasing类型的变量会被初始化为nil打印时会提示”null“不会crash。11、property关键字中加入了strong、weak、unsafe_unretained类型。在ARC中这些类型可以和retain、copy、assign混用但是出于规则最好使用新加入的。12、property类型使用总结(ARC)(1)strong和retain比较类似strong关键字对应__strong类型的变量它将持有所指向的对象。(2)weak关键字对应__weak类型的变量。weak不持有所指向的对象而且当所持有的对象销毁时会将自己置为nil。delegate和outlet都应该用weak来声明。(3)unsafe_unretained就是assign在ARC环境中大部分assign应该都应该被weak代替。但是一些基本类型还是要用assign比如int、float、bool等。(4)copycopy一个对象并且为其创建一个strong类型的指针。13、ARC需要SDK5.0的支持但是Deployment Target最低可以从iOS4开始。weak关键字是iOS5中新加入的在iOS4中使用unsafe_unretained代替但是当对象销毁时它修饰的变量不会被置nil需要自己手动维护。同样在iOS4中输出口用strong代替在dealloc方法中置nil。14、置空总结(1)strongretaincopy产生的都是__strong类型的变量在某些情况下需要手动置空第8点有提。(2)weak类型不会产生野指针因为当对象销毁时它会被置nil所以不用手动维护。(3)针对objective-c变量assign产生__unsafe__unretained类型的变量和unsafe_unretained一样这些变量在对象销毁时不会被置nil要自己处理野指针。(4)针对基本类型使用assign没有引用计数。(5)要延迟释放使用__autoreleasing关键字。15.ARC只针对Objective-C的代码。像Core Foundation样式的代码必须自己调用CFRetain和CGRelease自己管理内存。当在Objective-C和Core Foundation代码对象类型相互转换时需要告知编译器由谁来控制释放方法如下(1)__bridge关键字转换指针类型时不改变控制者(2)__bridge__retained或者CFBridgeRetain把Objective-C类型转换成非Objective-C类型的时候用然后由非Objective-C代码手动释放。(3)__bridge__transfer或者CFBridgeRelease将非Objective-C类型转换成Objective-C类型时用然后由ARC控制释放。16、在ARC中防止strong指针循环引用(1).如果A和B需要相互引用则A对B使用strongB对A使用weak。(2).ARC在block中的使用 在手动管理模式下对block外部变量使用__block则变量不会被retain但是在ARC模式下变量会仍然会被retain。解决办法如下使用__weak关键字代替__block关键字。因为ARC不会为__weak指针retain。(3)可以让循环引用的情况存在但是在想让循环引用消失的时候必须有合适的机制能够打破循环引用。