MRC & ARC

作者: 蜗牛也有梦想 | 来源:发表于2017-02-18 15:08 被阅读26次

    项目如何判断是用MRC还是ARC呢?

    判断项目使用的是ARC还是MAC.png

    如何让项目支持MRC或者支持ARC?
    给文件添加flags -fobjc-arc 就能让原来的MRC支持ARC

    MRC项目支持ARC.png

    如果要禁止ARC,则将flags 改为 -fno-objc-arc

    MRC

    创建对象的几种方式 alloc、new 、copy、mutableCopy,这四种方法创建的对象需要自己发送release消息手动释放。
    要想持有一个对象就要调用retain方法。
    方法的返回值,这种不知道什么时候该释放的对象需要调用autorelease方法,让自动释放池来管理对象的释放。

    ARC

    基本不需要关系对象的创建和释放,编译器会自动添加retain、release、autorelease方法。但有些对象也是需要做内存的管理的,例如CoreFoundation产生的对象。做pdf转图片保存到相册的时候遇到过的CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)[NSURL URLWithString:self.dataArr[_currentCount]]); 因为CGPDFDocumentCreateWithURL会retain创建的对象返回给pdf,而pdf又不是Objective-C对象,所以需要手动释放。CGPDFDocumentRelease(pdf);还有些内容
    NSTimer CADisplayLink 这两个类在addTarget的时候会强引用target对象,很容易造成循环引用。

    参考资料
    http://www.lanrenios.com/tutorials/all/2012/1024/221.html
    http://blog.csdn.net/wbw1985/article/details/7644815
    ARC阅读资料
    https://developer.apple.com/library/content/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
    http://clang.llvm.org/docs/AutomaticReferenceCounting.html
    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011-SW1
    http://clang.llvm.org/get_started.html
    Clang 介绍
    http://llvm.org/svn/llvm-project/cfe/trunk/
    Runtime介绍
    http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp
    苹果开源代码 runtime库实现
    https://opensource.apple.com/source/objc4/objc4-493.9/
    runtime/objc-arr.mm ARC相关的API
    runtime/objc-weak.mm __weak修饰符功能API

    libobjc2 是 Objective-C运行时库的实现,该库通过GNUstep工程实现ARC
    相当于苹果公司的Objective-C运行时库的实现 objc4
    http://gnustep.blogspot.com/2011/07/gnustep-objective-c-runtime-15-released.html
    http://thread.gmane.org/gmane.comp.lib.gnustep.general/36358
    http://svn.gna.org/viewcvs/gnustep/libs/libobjc2/1.5/

    相关文章

      网友评论

          本文标题:MRC & ARC

          本文链接:https://www.haomeiwen.com/subject/hborwttx.html