首页 > 其他分享 >在ARC(自动引用计数)下,IBOutlets 应该是强引用(strong)还是弱引用(weak)?

在ARC(自动引用计数)下,IBOutlets 应该是强引用(strong)还是弱引用(weak)?

时间:2023-11-15 13:00:42浏览次数:38  
标签:weak 视图 ARC 引用 IBOutlets strong

内容来自 DOC https://q.houxu6.top/?s=在ARC(自动引用计数)下,IBOutlets 应该是强引用(strong)还是弱引用(weak)?

我正在使用 ARC(自动引用计数)专门为 iOS 5 进行开发。在这种情况下,指向 UIView(及其子类)的 IBOutlet 应该是 strong 还是 weak

以下是示例:

@property (nonatomic, weak) IBOutlet UIButton *button;

这将消除以下代码:

- (void)viewDidUnload
{
    // ...
    self.button = nil;
    // ...
}

这样做会有什么问题吗?模板和直接从“Interface Builder”编辑器连接到头文件时自动生成的属性都使用了 strong,但为什么?UIViewController 已经对其 view 拥有一个 strong 引用,它会保留其子视图。


苹果当前推荐的最佳实践是将 IBOutlets 设置为 strong,除非在需要避免循环引用时才使用 weak。正如 Johannes 在上面提到的,在 WWDC 2015 的“在 Interface Builder 中实现 UI 设计”会议中,一位苹果工程师提到了这个问题:

最后一个选项是存储类型,可以是 strong 或 weak。通常情况下,你应该将 outlet 设置为 strong,特别是当你将 outlet 连接到一个子视图或者一个不会被视图层次结构一直保持的约束时。唯一需要将 outlet 设为 weak 的情况是当你有一个自定义视图引用了视图层次结构中的某个父视图,但一般不建议这样做。

我在Twitter上向 Interface Builder 团队的一位工程师询问了这个问题,他确认了 strong 应该是默认设置,并且开发者文档正在更新中。

https://twitter.com/_danielhall/status/620716996326350848
https://twitter.com/_danielhall/status/620717252216623104


标签:weak,视图,ARC,引用,IBOutlets,strong
From: https://www.cnblogs.com/xiaomandujia/p/17833581.html

相关文章

  • JUC并发编程学习笔记(十九)原子引用
    原子引用带版本号的原子操作!解决ABA问题,引入原子引用(乐观锁思想)AtomicStampedReference类解决ABA问题packageorg.example.cas;importjava.util.concurrent.TimeUnit;importjava.util.concurrent.atomic.AtomicStampedReference;//使用原子引用解决ABA问题publiccl......
  • Apple开发_NSString 使用 strong 与 copy 进行修饰的区别
    测试代码-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{NSMutableString*m_notiion=[[NSMutableStringalloc]init];m_notiion.string=@"房号密码的功能";self.m_notiion=m......
  • TD支持的库:python库、自身的python库、已经内置但需要自行引用的第三方库、第三方以外
    这是内置的第三方库asn1crypto (asn1crypto)-ParsingandserializingASN.1structuresAuthlib (authlib)-LibrarytobuildOAuthandOpenIDConnectservers.Certifi (certifi)- Root CertificatesforvalidatingthetrustworthinessofSSLcertificateswhi......
  • (十五)C#编程基础复习——值传递、引用传递、输出传递
    通过前面的学习,我们了解了在调用带有参数的函数时,需要将参数传递给函数。在介绍这几种传递方式之前,我们先来介绍一下形式参数(形参)和实际参数(实参)这两个概念:形式参数:在定义函数阶段参数列表中定义的参数称之为形式参数,简称形参,可以将它看做变量的名称,它没有具体的值,只是用来接收......
  • C++ 中的左值引用和右值引用
    最近看拷贝复制部分内容的时候看到移动构造函数和移动赋值运算符的声明中有个&&符号,另外在有些库里也看到了这个符号,所以把这个右值引用集中学习了一下,同时做了一些输出,希望也可以帮助到大家。C语言中的左/右值和C++中的左/右值是不一样的,C语言中的左值可以位于赋值语句的左......
  • 值类型与引用类型
    值类型和引用类型类型被分为两种:值类型(整数,boolstructchar⼩数)和引⽤类型(string数组⾃定义的类,内置的类)。值类型只需要⼀段单独的内存,⽤于存储实际的数据,(单独定义的时候放在栈中),默认值是0引⽤类型需要两段内存第⼀段存储实际的数据,它总是位于堆中,第⼆段是⼀个引⽤,指......
  • rust 程序设计笔记(2)所有权 & 引用
    所有权数据存储在栈和堆上,存放在栈上的数据都是已知所占据空间的突然的问题//内存中的栈是怎么存储数据的?好的,想象一下你有一摞盘子。你只能从上面放盘子,也只能从上面拿盘子,这就是栈的工作方式。在内存中,栈是用来存储数据的地方,它工作得就像这摞盘子。当你的程序运行......
  • latex文献引用(继续做回搬运工)
    plain,按字母的顺序排列,比较次序为作者、年度和标题unsrt,样式同plain,只是按照引用的先后排序alpha,用作者名首字母+年份后两位作标号,以字母顺序排序abbrv,类似plain,将月份全拼改为缩写,更显紧凑:ieeetr,国际电气电子工程师协会期刊样式:acm,美国计算机学会期刊样式:sia......
  • KubeBlocks v0.7.0 发布!支持引用外部组件,解耦备份 API,还支持了 Pika!
    我们很高兴地宣布KubeBlocksv0.7.0正式发布!在此版本中,KubeBlocks已支持31个开源数据库引擎,包括MariaDB、Elasticsearch、Pulsar和Pika等新的add-ons,为K8s用户提供了更广泛选择的同时,也延续了相同的用户体验。Highlights支持引用外部组件一些数据库集群依赖元数据存储进......
  • [转载]无法解析的外部符号 _WinMain,在函数_tmainCRTStartup中被引用
    原来项目的设置为:在静态库中使用MFC,能正常编译。后来发现产生的文件太大,于是改为:使用标准Windows库,再编译就出现了这个错误。   解决步骤一1.选中项目,右键,Properties,弹出PropertyPages窗口2.在左边栏中依次选择:ConfigurationProperties->C/C++->Preprocessor,然后在右边栏......