__block 与 __weak的区别是什么?

两者在功能上的区别?

__block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象从堆上销毁;

__weak仅仅是将该对象赋值给weak对象,当该对象销毁时,weak对象将指向nil;

__block可以让block修改局部变量,而__weak不能。

MRC中__block是不会引起retain;但在ARC中__block则会引起retain。所以ARC中应该使用__weak。

循环引用的问题?

block下循环引用的问题

__block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil

__weak可以避免循环引用,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题。

相关推荐
风启新尘5 小时前
ios巨魔越狱
支持向量机·ios·智能手机
Digitally5 小时前
没有充电器,如何给 iPhone 充电?
ios·iphone
bcbnb5 小时前
基于Mach-O文件的动态库与静态库归属方案及API扫描实践
后端·ios
2501_915921436 小时前
VSCode 写 Swift 运行到 iPhone?快蝎 IDE 开发实战体验
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
spencer_tseng6 小时前
anti-screenshot (Android + iOS)
android·ios
2501_915918416 小时前
基于Mach-O文件的动态库与静态库归属方案及API扫描实践
android·ios·小程序·https·uni-app·iphone·webview
2501_915106326 小时前
iOS 证书无法跨电脑使用?签名迁移方法一文讲透
android·ios·小程序·https·uni-app·iphone·webview
WeirdoPrincess7 小时前
iOS 打包签名资料准备指南(HBuilderX / uni-app)
ios·uni-app
for_ever_love__7 小时前
Objective-C学习: OC方法调用的本质
开发语言·学习·ios·objective-c
RickeyBoy21 小时前
独立 App 配置阿里云 CDN 记录
ios