美文网首页iOS 面试必看
assign retain copy strong weak 区

assign retain copy strong weak 区

作者: 唐艺和风榻榻米丨大连店 | 来源:发表于2015-12-23 09:58 被阅读230次

    当用copy时,set方法会先release旧值,再copy一个新的对象,reference count 为1(减少了对上下文的依赖);当用assign,直接赋值,无retain操作。当用retain,release旧值,retain新值;

    一个NSString 对象,地址为0×1111 ,内容为@”STR”

    Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化

    retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1

    也就是说,retain 是指针拷贝,copy 是内容拷贝。

    strong与weak的区别

    strong类似于retain,会将对象的引用计数器+1,分配内存地址。

    weak类似于指针,只是单纯的指向某个地址,但是本身并未分配内存地址。当指向的地址被销毁时,该指针会自动nil。

    __weak与__block的作用

    1.__weak修饰的对象不增加引用计数,不能被重新赋值

    例:__weakViewController*weakSelf =self;

    要避免强引用到self的话,用__weak把self重新引用一下就行了

    2.__block是用来修改block块中类中局部变量的值

    __block int mutableValue =7;

    int(^myBlock)(int) = ^(int num) {

            num = mutableValue ++;

            return num;//当用__block或__weak修饰类中某个局部变量时,num值才会被修改。

     };

    3.它们都可以解决循环引用问题

    __weak与__block的运用环境

    1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

    2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

    相关文章

      网友评论

        本文标题:assign retain copy strong weak 区

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