关于 assign weak copy retain 的问题
2017-02-15 本文已影响17人
哔哩哔哩智能喵
-
关于 assign weak copy retain 的问题
-
1.assgin的问题
-
什么时候用assgin:对基本数据类型进行赋值操作时候。
-
为什么基本数据类型
可以用
assign,因为基本数据类型一般分配在栈上,栈的内存会由系统自动处理,不会造成野指针。 -
assgin的特点是什么:用assgin修饰的对象在释放后,指针的地址还是存在的,指针没有为nil,会成为野指针。
-
-
2.weak的问题
-
什么时候用weak:weak一般多用于修饰代理,这样可以避免循环引用。
-
weak的特点:weak修饰的对象在释放后,指针地址会置为nil。
-
-
3.copy的问题
-
什么时候用copy:修饰NSString和block
-
为什么修饰NSString和block用block
-
修饰NSString:一般情况下,我们都不希望字符串的值跟着赋值的字符串变化,所以一般情况下用NSString用Copy。如果希望字符串的值��跟着赋值的的字符串的值变化,可以使用strong
-
修饰block:block在创建的时候,它的�内存�是分配在栈上的,而不是堆上,可能随时被回收,他本身的作用域是属于创建的时候的作用域,一旦在创建时候的作用域外面调用block将导致崩溃。通过copy可以把block拷贝到堆,保证block的声明域外使用。
在ARC下写不写都行,编译器会自动对block进行copy操作。
-
copy的特点:创建一个新的对象
-
-
-
4.retain的问题:
-
什么时候用retain:Mrc下对一个对象的引用计数+1的时候
-
retain的贴点:创建一个新的指针,指针拷贝。拷贝的指针引用计数器+1,(被拷贝)旧的指针释放
-