swift闭包与OC中Block循环引用[weak self]

Swift iOS开发实战:从ARC内存管理到App Store审核避坑指南 Swift作为iOS开发的核心语言,其价值远不止类型安全与语法简洁——它深度耦合UIKit生命周期、ARC内存模型与结构化并发机制。理解Optional如何根治空值崩溃、Result与async/await如何重构异步错误处理、@StateObject与@Binding如何划定状态边界,是构建高稳定性App的基础。尤其在真实生产环境中,内存泄漏、SIGABRT崩溃、网络超时、Preview预览失败等高频问题,本质都源于对Swift与iOS平台协同逻辑的误读。本文聚焦Swift在UIKit和SwiftUI双栈 阅读详情

swift中闭包 OC中Block 解决循环引用

OC中全局宏定义

#define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self;

用法如下:

WS(weakself)

[self.tableView addHeaderWithCallback:^{

[weakself requestMemberList];

}];

swift 在比闭包 中使用 weakSelf

weak var weakSelf = self
demo4 {
    // 使用?的好处 就是一旦 self 被释放,就什么也不做
    weakSelf?.view.backgroundColor = UIColor.redColor()
}

直接添加[weak self]

HYHttpTool.post(url: urlString, param: ["appid":WXAPPID,"secret":WXSECRET,"code":code,"grant_type":"authorization_code",]) { [weak self] (response, result) in
  self?.
}

class func post(url: String?, param: Parameters, complete: @escaping (HTTPURLResponse?, Result<Any>) -> Void ) -> Void {

  // 如果发过来的链接长度为空,则直接返回,不做任何反应
  guard let urlString = url, strlen(url) > 0 else {
    return
  }

  Alamofire.request(urlString, method: .post, parameters: param).responseJSON { (response) in
    complete(response.response, response.result)
  }
}

swift 中一个类可以嵌套定义另外类,新增加的类只能被当前类使用

在 swift 中,要解除闭包的 循环引用,可以在闭包定义中使用 [unowned self] 或者 [weak self],其中:

[unowned self] 类似与 OC 中的 unsafe_unretained,如果对象被释放,仍然保留一个 无效引用,不是可选项

[weak self] 类似与 OC 中的 __weak,如果对象被释放,自动指向 nil,更安全

[weak self] 时时监控性能较差,[unowned self]可能导致野指针错误,如果能够确定对象不会被释放,尽量使用 unowned

懒加载的闭包

lazy var printName: ()->() = { [unowned self] in
  print(self.name)
}

下面这句不会发生发生循环引用因为执行完就会消失

lazy var title: String = {

  print(self.name)
  return "Mr. \(self.name)"
}()
iOS工程师能力评估:从基础到架构的九维实战衡量框架 在移动开发领域,工程师的真实水平往往难以通过零散面试题或简单自我介绍来准确判断。一个可靠的评估体系,需要从语言基础、内存管理、并发编程、系统框架、UI构建、工程化工具,到性能优化、架构设计与上架合规等多维能力进行系统拆解。理解Objective-C与Swift的底层机制,掌握循环引用排查、RunLoop原理、UIKit响应链与自动布局细节,并具备真机调试、证书配置、抓包分析乃至性能瓶颈定位实战经验,才可能应对复杂线上问题。本文围绕“工程师能力评估”的核心命题,提出一套覆盖开发、调试、发布全链路的九维模型,结 阅读详情

相关推荐

欢聚时代iOS校招B卷解析:内存管理、多线程与架构设计考点全梳理

在iOS开发中,内存管理与多线程是构建稳定应用的核心基础,也是校招笔试中的高频考察方向。理解ARC与MRC的本质差异、掌握Runtime消息传递机制,能够帮助开发者规避野指针与循环引用等潜在风险;而合理选型GCD与NSOperation、优化AutoLayout性能,则直接关系到直播类App的流畅性与稳定性。这些底层原理不仅决定代码质量,更是大型项目架构设计的前提。从MVC到MVVM的演进、组件化模块解耦,乃至HTTPS安全通信与数据持久化方案选型,均离不开对基础机制的深入理解。本文以欢聚时代2017年iO

weixin_34357928的博客 450

Swift中的weak和unowned关键字

Swift中没有了strong, assign, copy属性修饰符,对于所有的class类型变量都默认采用了strong类型,如果需要指定使用weak,则需要添加weak关键字修饰。 正是由于这种默认的strong类型,在闭包中会引起循环引用,导致内存无法释放,为了能够在闭包(block)中正常释放内存,需要对闭包中的self使用弱引用,也就是不持有self对象。 如下面的代码中: class UserInfoViewController { // ... private lazy var

Rey的技术博客 1111

iOS面试核心知识点深度解析:从ARC到性能优化的系统性整理

移动开发技术面试中,内存管理与多线程并发是必考基础。ARC的引用计数机制、循环引用排查、Autoreleasepool的实际应用,决定了开发者对底层原理理解的深度;而GCD的队列与锁选型,则直接影响App运行时的性能与稳定性。随着iOS生态持续更新,面试考察已从单一API记忆转向系统性工程能力,涵盖网络层、架构设计、启动优化等实战维度。本文基于高频面试题,按语言基础、并发、系统机制、网络、架构、新特性六大模块,拆解从原理到实践的完整答题思路,帮助开发者构建可迁移的技术认知,从容应对从初级到高级的各类追问。

weixin_30846347的博客 271

swift [unowned self] 和 [weak self]区别 ObjC weak和 assign区别

weak 一般我们用来修饰delegate ,block中使用 __weak typeof(self) weakSelf = self; 这两者都是为了避免产生循环引用 循环引用的产生(如): @class Dog; @interface Person : NSObject ///人有一条宠物狗 @property (nonatomic,strong) Dog *dog; @end ...

aasdsjk的博客 5264

weakable-self:Swift微框架可轻松处理内部封闭中对自身的弱引用

弱自我 语境 闭包是Swift的必备功能之一,Swift开发人员意识到,当捕获外部对象的引用时,特别是当该对象是self时,它们可能会非常棘手。 为了解决此问题,开发人员需要使用[weak self]和guard等结构编写其他代码,其结果如下所示: service. call ( completion : { [ weak self ] result in guard let self = self else { return } // use weak non-optional `self` to handle `result` }) WeakableSelf目的 此微框架的目的是为开发人员提供weakify的帮助功能,使他可以声明性地表示自己希望使用弱的非可选引用来封闭self ,而不必担心如何提供此引用。 用法 使用此weakify功能,以上代码将转换为

5G中的RedCap

5G中的redcap

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 2527

swift 通知_Swift 闭包无脑加 [weak self] 行不行?

用到 Swift 的闭包的时候,我们经常会加 [weak self]。但你有没有问过自己,它是不是非加不可?比如这个场景:class YourViewController { override func viewDidLoad() { super.viewDidLoad() DispatchQueue.main.asyncAfter(deadline: .n...

weixin_39606137的博客 772

MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)

   分析大脑解剖学差异最常用方法之一是基于体素的形态学方法(voxel-based morphometry, VBM)。 VBM的基本思想是测量大脑组织,尤其是灰质的局部浓度的差异。在大脑的每个体素处进行操作,然后在两个或多个实验组之间进行统计比较,从而在受调查的组之间建立特定大脑区域中脑组织浓度的统计学显着差异。 VBM分析基于(高分辨率)MRI脑部扫描,涉及大量处理步骤,主要是空间归一化,分割,平滑和统计分析,最终结果是统计图,显示了各组之间组织类型明显不同的区域[^1]。 参考 [^1] ..

意疏的学习笔记 3万+

iOS swift block防止循环引用

override func viewWillDisappear(_ animated: Bool) { //如果不stop,可能导致扫描到外设的时候,block调用时vc为nil,导致程序崩溃 XYCentralManager.shared.stopScan() } @objc func rightBarBtnItemClick(){ isSearch = false weak var vc = self XY...

baidu_40537062的博客 786

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 476

BIOS更新后PIN不可用怎么办?从原理到实操的完整修复指南

在计算机维护中,BIOS更新是常见的固件升级操作,但其引发的登录异常却常让用户措手不及。Windows Hello PIN并非传统密码,它通过TPM芯片与设备启动环境(PCR状态)强绑定,一旦主板固件或安全启动配置改变,TPM便会拒绝释放密钥,导致“由于此设备上的更改,你的PIN不再可用”。理解这一原理后,恢复路径清晰可控:优先尝试密码登录,或通过WinRE替换utilman.exe创建临时管理员,必要时还需处理BitLocker恢复密钥。本文面向系统维护与数据安全场景,系统梳理PIN失效的恢复流程与避坑方

weixin_31364787的博客 359

iOS开发笔记之八十九——Swift中的闭包

*****阅读完此文,大概需要5分钟****** 一、闭包的基本概念与写法 1、Swift中闭包需要对比OC的block: OC的基本定义与写法: 返回值(^闭包名称)(参数类型 参数名) = ^(参数类型 参数名){函数体}; void(^XXBlock)(int a) = ^(int a){ NSLog(@"hello"); }; Swift基本定义与写法: {(参数:参数类型)->返回值类型 in 函数体}如果设置了返回值,记得返回对应类型的值 let test =..

iOS开发笔记 1万+

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

Swift 闭包使用(循环引用...)

class networkTool: NSObject { //定义一个可选类型的闭包,用小括号()?括起闭包 var finishedCallBack2:((_ jsonData:String)->())? /* 模拟数据请求,定义一个闭包 闭包类型:(参数列表)->(返回值类型) @e...

weixin_30363817的博客 184

大麦网抢票软件工具开发系列(一)

前言《大麦网》都知道吧,就是那个被网友声称“大麦网你卖啥了?”票务平台。近期有听到朋友说《大麦网》的票很难抢,基本上都是说:“哎哟喂,被挤爆啦,请稍后重试!”,也不知道《大麦网》...

架构文摘 1万+

YOLO11涨点优化:注意力魔改 | 引入Deformable Attention (可变形注意力),灵活感受野自适应复杂形变目标

Deformable Attention为YOLO11带来的不仅是2.6个百分点的mAP提升,更是一种全新的“形变感知”范式。标准卷积的固定感受野在非刚性目标、多尺度变化和遮挡场景下力不从心——Deformable Attention恰好填补了这一空白。从架构设计到代码实现,从竞品对比到部署方案,从生态工具到安全风险,本文覆盖了将Deformable Attention引入YOLO11所需的全部知识链路。

2601_95807009的博客 284

Swift 闭包循环引用安全

Swift 闭包 循环引用 安全

boyXiong 1415

【DDR5 PCB走线SI/PI仿真调试】详细全攻略

问题场景发现症状优化措施过孔Stub效应TDR波形尖峰,信号反射严重使用盲孔,背钻减少Stub,降低Via数量串扰过大眼图闭合,误码率增加增加走线间距,插入地线隔离,减少平行长度电源阻抗过高PDN谐振导致纹波大多频率去耦,靠近电源引脚布置多档电容,合理分层信号时序失配优化走线长度匹配,避免信号走线跨层跳变DDR5设计不仅是硬件的挑战,更是仿真能力的考验。掌握SI/PI仿真,理解信号背后的物理本质,才能真正把握高速接口的“灵魂”!

weixin_43199439的博客 987

闭包的循环引用

三种解除闭包循环引用的方式[weak self] 表示闭包中的 self 是弱引用,如果 self 被释放,会自动设置为 nil与 OC 的 __weak 等效 [unowned self] 表示闭包中的 self 是 assign 的,如果 self 被释放,指针地址保持不变,会出现野指针的错误与 OC 的 __unsafe_unretained 等效 创建有循环引用的代

weixin_37664648的博客 917

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Swift 4.0学习之:闭包

闭包 说到闭包,用法跟OC的block是一样一样的,基本格式是 { ()-&gt;() in } 通常是放到函数的实参里,举一个实际应用的例子: 目标:创建一个scrollorView,上面有10个按钮,要求有一定的可复用性,可维护性,可扩展性。代码如下: override func viewDidLoad() { super.viewDidLoad() ...

Zoneday的博客 522

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

对 Strong-Weak Dance的思考

在使用 Block 时,除了使用 __weak 修饰符避免循环引用外,还有一点经常容易忘记。苹果把它称为:“Strong-Weak Dance”。问题来源这是一种 强引用 --&gt; 弱引用 --&gt; 强引用 的变换过程。在弄明白为什么要如此大费周章之前,我们首先来看看一般的写法会有什么问题。__weak MyViewController *wself = self;self.complet...

HumorousGhost 487

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从欢聚时代iOS校招C卷看Objective-C与Runtime核心考点

在iOS开发中,Objective-C和Runtime是绕不开的底层基石,更是校招与社招面试中高频考察的技术栈。理解内存管理、引用计数、消息转发与RunLoop机制,不仅有助于分析属性关键字、block循环引用等经典问题,也能为多线程并发和性能优化提供扎实的理论支撑。从直播、IM等高实时互动场景到列表流畅度优化,这些原理始终贯穿于工程实践。本文通过复盘一份2017年欢聚时代iOS工程师校招笔试卷,梳理其题型结构与出题逻辑,提炼出依然适用于当今面试的常青知识点,帮助开发者建立系统化的底层认知,从而在技术面试与

weixin_33796177的博客 307

iOS秋招全攻略:从内存管理到面试实战的硬核经验

内存管理、多线程与RunLoop是iOS开发的基石,也是面试官高频考察的技术要点。理解引用计数、GCD队列、RunLoop运行模式等底层原理,不仅能解决循环引用、列表卡顿等实际工程问题,更是评估开发者技术深度的关键标尺。从AutoreleasePool的释放时机到NSOperation与GCD的适用场景,这些基础概念贯穿于性能优化、图片缓存、网络层设计等常见业务需求之中。本文作者结合自身四十余场iOS秋招面试经历,系统梳理了简历准备、复习资料取舍、高频八股文、项目深挖技巧、算法题策略、系统设计思路及HR面沟

weixin_34095889的博客 354

iOS工程师能力评估框架:从语言底层到工程化实战

移动开发技术栈的持续演进,使得iOS工程师的评估维度早已超越单纯的语法与API使用。从OC/Swift的内存管理、Runtime机制,到UIKit约束与UIStackView的布局实践,再到系统级框架如CoreBluetooth的BLE连接参数规范与CBPeripheralManager的蓝牙状态管理,每一项都指向对系统行为与版本差异的深度理解。同时,iOS设备模拟与真机调试的差异、证书更新与签名机制、上架与加急审核流程,以及混合开发方案和多端适配要求,共同构成了工程化落地的完整闭环。理解底层原理、熟悉系统

weixin_32642109的博客 314

阿里iOS五轮面试复盘:从基础到架构的完整备战思路

移动端开发中,iOS技术栈的深度与广度往往决定职业天花板。在iOS开发面试中,内存管理、Runloop、多线程等核心机制是考察重点,而项目深挖与工程架构能力则反映候选人的实战水平。理解引用计数与GCD底层原理,掌握卡顿监控和性能优化方法,能够帮助开发者应对大厂的高强度技术面。无论是组件化拆分还是系统设计题,都需要清晰的思考路径和复盘方法。本文以阿里iOS五轮面经为例,梳理了从电话初筛到HR面的考察逻辑,总结了面试准备、现场答题和复盘的关键技巧,为准备大厂iOS岗位的开发者提供参考。

weixin_30879833的博客 341
上一篇: swift通知快速创建
下一篇: 苹果app内h5页面调试
瓦怕落地
博客等级 码龄11年 16粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值