iOS 面试题(九):为什么block要使用copy而不是strong或者其他属性修饰?
2018-03-08 22:00
411 查看
相信有很多面试者被问到这样的问题:block使用什么修饰,往往能够答出是copy,很多面试官就会问到:为什么要使用copy,这时候就懵了。
我亲身体验了一把,所以先总结一下。
block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈上的,而不是在堆上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。因为栈区的特点就是创建的对象随时可能被销毁,一旦被销毁后续再次调用空对象就可能会造成程序崩溃,在对block进行copy后,block存放在堆区.
使用retain也可以,但是block的retain行为默认是用copy的行为实现的,
因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。
我亲身体验了一把,所以先总结一下。
block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈上的,而不是在堆上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。因为栈区的特点就是创建的对象随时可能被销毁,一旦被销毁后续再次调用空对象就可能会造成程序崩溃,在对block进行copy后,block存放在堆区.
使用retain也可以,但是block的retain行为默认是用copy的行为实现的,
因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。
相关文章推荐
- 代码块(block)的使用---iOS4.0以后推出(声明成属性的时候,用copy修饰)
- iOS 开发 NSString(NSDictory,NSArray)为什么用copy修饰,而不是用strong修饰
- iOS 面试题~用@property声明NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- iOS中NSString 使用 copy 和 strong 修饰的区别详解
- iOS为什么Block的属性声明要用copy
- ios-block作为属性的时候为什么用copy
- NSString类型的属性一般用copy修饰,而不是用strong来修饰。
- iOS中为什么block用copy属性
- iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因
- [iOS]NSString到底使用Copy还是使用Strong属性,有什么区别
- IOS中级篇——何时使用copy, strong, weak, assign关键字定义属性
- iOS NSString 为什么要使用copy,而不是retain?
- iOS开发-------属性用copy、strong修饰的区别
- iOS之Block为什么用copy修饰
- ios中为什么block用copy属性
- IOS中属性的关键修饰词:strong weak assign copy retain等。。
- block为什么使用copy修饰
- iOS中为什么block用copy来修饰
- iOS为什么Block的属性声明要用copy