iOS中delegate代理对象使用weak

iOS Block与Delegate的用法,各自优缺点及使用场景 问题: 你是否有想过在UITableViewCell上把UIButton点击事件回调到UIViewController?你是否有想过在封装Alamofire或者AFNetWorking的时候回调网络数据? 概念: Block官方解释: Block objects are a C-level syntactic and runtime feature. They are similar to... 阅读详情
之前不停应用的是assign,本日调试一段代码的时间,发明顺序会crash失落,报错EXC_BAD_ACCESS 经由一番研讨,发明若是应用 @property (nonatomic, assign, readwrite) id delegate; 声明一个delegate,那末即] 

之前一直使用的是assign,今天调试一段代码的时候,发现程序会crash掉,报错EXC_BAD_ACCESS


经过一番研究,发现如果使用

@property (nonatomic, assign, readwrite) id delegate;

声明一个delegate,那么即便delegate指向的对象销毁了,delegate中依然会保存之前对象的地址

即,delegate成为了一个野指针...


而使用weak,则不会有上述问题,当delegate指向的对象销毁后,delegate = nil


--------------------------------------------

所以答案就是,使用weak。




代理             weak

UILabel ,控件      strong

NString            Copy
int 数据类型的   assign



下面两种方式都是弱引用代理对象,但是第一种在代理对象被释放后不会导致崩溃,而第二种会导致崩溃。

 

1
2
@property (nonatomic, weak) iddelegate;
@property (nonatomic, assign) iddelegate;

weak和assign是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。在iOS中,向nil发送消息时不会导致崩溃的,所以assign就会导致野指针的错误unrecognized selector sent to instance。

所以我们如果修饰代理属性,还是用weak修饰吧,比较安全。

深入解析iDP3的Learning模块:从数据集构建到3D动作预测的代码实现 本文深入解析iDP3框架的Learning模块,从数据集构建到3D动作预测的完整代码实现。通过扩散模型实现视觉输入到动作序列的端到端预测,详细介绍数据采集、增强策略、模型架构及训练技巧,帮助开发者掌握3D动作预测策略的核心技术。 阅读详情

相关推荐

AgentScope Java多智能体框架

AgentScope Java 的核心设计理念是“Agent-Oriented Programming” (面向智能体编程)。

zzz19920821的博客 1734

iOS - Delegate代理为什么要用weak修饰(面试官钟爱)

最近,我自己也是刚刚找到工作,也是面试了很多家公司。也尝试着总结一下,这是我的第一篇面试之后的总结,那么前戏不多,直奔主题,小伙们似乎已经等不及啦。我们开发的过程中经常的使用代理delegate来替我们做事,而怎么修饰代理属性呢,说实话之前我还用过strong,却也一样实现功能,那时候我觉得有什么的,搞得出来都一样,想想都好笑。这个问题也是面试官的钟爱问题了。现在,这里郑重庄严的说一下delegat

月神_ 3765

深入Google DroidGuard:剖析其自定义虚拟机如何守护Android应用安全(附pcbc文件机制解析)

本文深入解析Google DroidGuard自定义虚拟机如何通过独特的架构设计和加密机制保护Android应用安全。DroidGuard采用动态密钥派生、全加密执行环境和pcbc文件机制,有效防御逆向工程和自动化攻击,为移动安全提供新思路。

weixin_34254464的博客 307

iOS 代理 delegate 不都是用 weak 吗?

iOS 代理 delegate 不都是用 weak 吗?

豪冷的博客 462

紫光同创国产FPGA学习之Fabric Debugger

文章从紫光同创参考书拷贝过来的。因为我用的时候,看了一下就会用了(纯粹只是会用了,默认和xilinx的一样),没有看教程。先更新点文本,后面在写程序。 一、      软件简介 Fabric Debugger是一款界面化的FPGA芯片调试工具,能够针对公司目前以及未来的FPGA芯片进行在线调试。本软件直接与JtagHub、DebugCore交互,能够实时的配置目标FPGA、设置触发条件并且观测结...

my_share的专栏 6388

如何理解鲁棒性?为什么robustness会翻译为鲁棒性?

鲁棒性,英文为Robustness(承受故障和干扰的能力),是许多复杂系统(包括复杂网络)的关键属性。复杂网络的鲁棒性研究对许多领域都非常重要。本文着重介绍了鲁棒性的基本定义、命名起源、分类区别、提升方法和具体应用,供大家学习参考。

weixin_46880696的博客 8万+

IOS:代理delegate为什么要用assign或者weak

最近很多朋友问我代理为什么要用assign或者weak,很多人都知道是为了避免循环引用,但问其实质却并不了解。下面是我开发过程中对代理为什么要用assign或者weak的一些个人看法: 首先要明白内存管理,最主要的一点就是知道IOS的内存管理机制,就是任何对象里都有一个retainCount属性,一旦retainCount=0,那么该对象就会自动销毁,而strong或者iOS以前的retain,

SugerIsComing的博客 4880

瑞芯微RK3506开发板DSM音频开发避坑指南:从硬件改接到内核配置全流程

本文详细解析了在瑞芯微RK3506开发板上进行DSM音频开发的完整流程与关键避坑点。内容涵盖从硬件改造(如电阻焊接)、内核驱动配置(DTS参数、补丁应用)到系统调试与波形分析的全过程,旨在帮助嵌入式开发者高效实现高信噪比、低成本的音频方案,避免常见错误。

weixin_29164091的博客 407

关于IOS delegate的weak和assign 探讨

在使用IOS的别人写的SDK时,发现定义的delegate都是assign修饰的,相信很多人也会和我一样刚开始表示很不解。 1、delegate为什么用weak来修饰? 2、delegate用assign修饰怎么办?

peaceworld_smiling的专栏 3745

Matlab实战:用Transformer+LSTM+SVM搞定股票价格预测(附完整代码)

本文介绍了一种基于Transformer、LSTM和SVM的混合建模方法,用于股票价格预测。该方法结合了Transformer的全局依赖捕捉能力、LSTM的时序特征提取优势以及SVM的非线性回归能力,有效应对金融时间序列的非平稳性和噪声问题。文章提供了完整的Matlab实现代码,并展示了混合模型在实盘测试中的优异表现,方向预测准确率达62%,最大回撤控制在3.2%以内。

milk8的博客 254

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4074

iOS 代理为啥要用weak修饰? (刨根问底一)

在开发中我们经常使用代理,或自己写个代理,而代理属性都用weak(assign)修饰,看过有些开发者用strong(retain),但并没发现有何不妥,也不清楚weak(assign)与strong(retain)修饰有何区别功能实现就行了,考虑这么多干嘛~~~我只能哈哈哈 weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制 @property (no

HHuiHao 2470

EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区

以实际的从站EEPROM数据为例,参照EtherCAT的SII规范,详细分析了从站EEPROM字8-字15的产品标识区内容组成。

kevin1499的博客 718

iOS中delegate代理对象使用weak和assign哪个

之前不停应用的是assign,本日调试一段代码的时间,发明顺序会crash失落,报错EXC_BAD_ACCESS 经由一番研讨,发明若是应用 @property (nonatomic, assign, readwrite) id delegate; 声明一个delegate之前一直使用的是assign,今天调试一段代码的时候,发现程序会crash掉,报错EXC_BAD_ACCESS

天道酬勤 4202

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

iOS中delegate代理对象使用weak和assign哪个?

之前一直使用的是assign,今天调试一段代码的时候,发现程序会crash掉,报错EXC_BAD_ACCESS 经过一番研究,发现如果使用 @property (nonatomic, assign, readwrite) id delegate; 声明一个delegate,那么即便delegate指向的对象销毁了,delegate中依然会保存之前对象的地址 即,delegate

xcode_hu的专栏 570

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OC基础面试题

1.iOS中delegate代理对象使用weak    之前不停的使用assign,今天在调试一段的时候,发现使用assgin的时候程序会crash,报错EXC_BAD_ACCESS, 经过一番研讨,发明如果应用 @property (nonatomic, assign, readwrite) id delegate;,用assign声明一个delegate,那么即便代理指向的对象销毁...

154

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

delegate 为什么应该是 weak 类型而不是strong类型

delegate 为什么应该是 weak 类型而不是strong类型 循环引用 对象a创建并引用了对象b.对象b创建并引用了对象c.对象c创建并引用了对象b. 这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。 打

fxmmc的专栏 2383

iOS开发——使用delegate进行消息传递

iOS开发中,界面之间传递消息或者数据是最基本的一种需求,我们可以使用很多方法来实现这种需求,比如在头文件中暴露一个属性、比如使用notification等等。今天我们要来介绍另一种方式:使用delegate传递消息。        delegate称为委托,同时也是一种代理设计模式。使用委托避免了类与类的耦合度过高。利用委托赋值更加安全可控,委托赋值在不暴露自己类的属性的前提下就可以对自己进行

乞力马扎罗的雪CYF的博客 4464

iOS:delegate代理的使用

项目开发过程中需求是将下载的图片通过

F-ZERO-F的博客 361

block用copy修饰,delegate 用weak修饰,

参考链接:http://www.jianshu.com/p/073db200b285 block: 用copy修饰 typedef void(^BlockBack)(NSString *str); @interface ViewController : UIViewController - (void)loginWith:(NSStrin

lvchaman的专栏 1266

IOS代理delegate的使用

IOS中代理的使用频率非常高,这次就介绍一下delegate的基本使用,首先代理分为委托方和代理方 委托方 调用代理的地方 Bviewcontroller.h /** 委托方第一件事,声明代理协议 */ @protocol BViewControllerDelegate <NSObject> -(void)callbackVlaue:(NSString*)backValue; @end @interface BViewController : UIViewController /

lee727n的博客 707

iOS Delegate模式

本文介绍了iOS中常用的delegate模式

m0_61227789的博客 1728

iOS delegate

  有两个scene,分别为Scene A和Scene B。Scene A上有一个UIButton(Button A)和一个UILable(Lable A);Scene B上有一个UITextFiled(textFiled)。当单击Scene A上的Button A时,跳转到Scene B,在Scene B的textFiled上输入文字,单击键盘的“完成”按钮,返回到Scene A,并在...

a861465724的博客 284

iOS中的delegate的用法和规范

Objective-C中的delegatedelegate是Objective-C编写的应用中各种对象之间互相调用的主要方式之一. 通常情况下, 对象可以接收的消息都通过在接口文件中声明的方法来表示.@protocol MyProtocol <NSObject> - (void)func; @end什么是delegatedelegate是委托模式.委托模式是将一件属于委托者做的事情,交给另外一个被委

晓月的专栏 3万+

Delegate代理用weak来修饰

Delegate用weak来修饰的原因就是为了防止循环引用, 就是两个对象相互强引用,就会导致retain cycle, 从而导致内存泄露。 如果用assign弱引用可以吗? weak和assign是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。在iOS中,向nil发送消息时不...

ekk0的博客 557

iOS 弱引用weak的使用

OC开发过程中,我们经常会使用到弱引用和强引用 我们为什么要使用弱引用呢?要想知道这个我们需要weak的原理。 原理:Runtime维护了一个weak表,其实weak是一个hash(哈希)表,其中key表示指向对象的指针,value是一个数组,里面存储的weak指针的地址数组,当我们使用__weak的时候,我们会先查找有没有这么一个表,如果没有,我们会直接创建这个表,并把对应内容写入,如果存在,他会直接写入对应内容 那为什么value是个数组呢? 因为一个对象地址可能对应多个weak指针地址 那.

WangQingLei0307的博客 1052
上一篇: 3D touch
下一篇: iOS单例创建及应用
helloworld_junyang
博客等级 码龄11年 9粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值