ARC自动引用计数学习笔记

本文深入探讨了Objective-C与Swift在iOS应用开发中的使用场景与优势对比,介绍了两种语言的特点、优缺点及实际项目中的应用经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

在 ARC 中,所有*outlet*属性都推荐使用 weak,这些 view 对象已经属于 View Controller 的 view hierarchy,不需要再次定义为 strong(ARC 中效果等同于 retain)。唯一应该使用 strong 的 outlet 是 File's Owner,连接到 nib 的顶 层对象。 

因为 tableView 和 searchBar 这两个 property 定义为 weak,当它们指向的 对象被释放时,这两个变量会自动设置为 nil。

当 iOS App 接收到低内存警告时,View Controller 的 main view 会被 unload, 同时会释放所有 subview。这时 UITableView 和 UISearchBar 对象会自动释放, zeroing weak pointer system 就会自动设置 self.tableView 和 self.searchBar 为 nil。因此不需要在 viewDidUnload 中再次设置为 nil,实 际上当 viewDidUnload 被调用时,这两个属性已经是 nil 了。 

这并不意味着你可以不需要 viewDidUnload,只要你保持一个对象的指针, 对象就会存活。当你不需要某个对象时,可以手动设置指针为 nil。如上面示例 代码中的 soundEffect = nil; viewDidUnload()方法里面需要设置所有非 outlet 变量为 nil,同样还有 didReceiveMemoryWarning()方法。 

 

2.

property 的修饰符总结如下: 

  • strong:等同于"retain",属性成为对象的拥有者

  • weak:属性是 weak pointer,当对象释放时会自动设置为 nil,记住 Outlet

    应该使用 Weak

  • unsafe_unretained:等同于之前的"assign",只有 iOS 4 才应该使用

  • copy:和之前的 copy 一样,复制一个对象并创建 strong 关联

  • assign:对象不能使用 assign,但原始类型(BOOL、int、float)仍然

    可以使用 

 

转载于:https://www.cnblogs.com/mysaya/p/4569581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值