zoukankan      html  css  js  c++  java
  • IOS开发--第四阶段--内存管理

    深拷贝与浅拷贝

    只有实现了NSCoping协议的对象才能进行copy,自定义对象的copy需要实现NSCopy协议,具体是深拷贝还是浅拷贝取决于协议如何实现

    copy得到的类型一定是不可变的;mutableCopy得到的类型一定是可变的

    浅拷贝:拷贝过后内存地址(指针)没有改变;

    深拷贝:拷贝过后内存地址(指针)发生改变;

    不可变的类型进行不可变的拷贝是浅拷贝,其他都是深拷贝;只要见到mutable,都是深拷贝(不管是拷贝类型还是拷贝方法);

    1)NSString: copy   浅拷贝 ,   拷贝过后为  NSString   不可变;

                        mutableCopy  深拷贝,    拷贝过后为 NSMutableString  可变;

    2)NSMutableString: copy   深拷贝  ,    拷贝过后为  NSString   不可变;

                                    mutableCopy  深拷贝 ,   拷贝过后为 NSMutableString  可变;

    (NSArray,   NAMutableArray)  (NSDictionary,  NSMutableDictionary)  NSSet(集合)同上类似

    3)copy时顺便会附带一个Strong

    4)@autoreleasepool{} 自动释放池; for循环创建一个对象就释放一个对象

    5)NSAutoreleasepool *pool = [NSAutoreleasepool  alloc] init];

    注意:

    错误代码@property ( nonatomic,copy)NSMutableArray * mutableArray;

    运用该种写法时必须重写其set放法;

    正确写法@property ( nonatomic,retain)NSMutableArray * mutableArray;

    ARC

    ARC中[super delloc]方法已不能调用,但delloc方法依然有效,所以依然可以 [[NSNotificationCenter defaultCenter] removeObser:self];

    Strong,Weak

    1)Strong为强引用,Strong指针指向的对象永不释放,没有strong指针指向它时,它会立即释放;

    2)weak是弱应用,当其对象被释放时自动置为空;没有Strong和weak指针修饰的对象默认为__strong;

    3)在ARC中@property retain的对象在编译是会自动编译为Strong

    4)strong,weak不修饰简单类型,简单类型用assgin 或  unsafe_unretained 

    5)在ARC的block中,之前为防止循环引用用__block,现在用weak;

    在ARC环境下添加非ARC文件:-fno- objc-arc

    在非ARC环境下添加ARC文件:-fobjc-arc

    拓展:

    转换, 桥接

    1).m                OC和 C 可以直接混编;

    2).m--->.mm   OC与C ,C++混编时;

    3) .cpp             C和C++混编,不与OC混编 ;

    4)__bridge_retained      OC--->C    转换的时候会retain一次;(用于全局的方法,且方法必须是在.h中声明过的方法);

    5)__bridge_transfer       C--->OC    转换的时候会release一次;

    6)__bridge                    C<--->OC 相互转换时引用计数不产生任何更改;(用于局部的方法,且方法必须是在.h中声明过的方法);

  • 相关阅读:
    20169203 2016-2017-2 《网络攻防实践》第七周学习总结
    20169203 2016-2017-2 《网络攻防实践》第六周学习总结
    20169203 2016-2017-2 《网络攻防实践》 第五周学习总结
    ubuntu hadoop环境搭建
    weka环境配置
    20169207 2016-2017-2 《网络攻防实践》课程总结
    20169207 2016-2017-2 《移动平台应用开发实践》第十四周作业
    20169207 2016-2017-2《网络攻防实践》第十四周作业
    20169207 2016-2017-2《移动平台开发应用实践》第十三周作业
    20169207《移动平台应用开发实践》2016-2017-2 第十二周作业
  • 原文地址:https://www.cnblogs.com/gegeboke/p/4364963.html
Copyright © 2011-2022 走看看