gpt4 book ai didi

objective-c - ARC 迁移后更改属性和 ivars

转载 作者:太空狗 更新时间:2023-10-30 03:21:38 25 4
gpt4 key购买 nike

我已经使用 Xcode 4.3 中的“Convert to Objective C ARC”选项将 Xcode 4.0 中启动的项目转换为使用 ARC。在修复该工具发现的错误后,我经历了迁移工具删除所有发布消息并在我的属性声明中保留属性的过程。所以现在我的所有属性都只有 (nonatomic) 属性。通过阅读文档,我仍然没有明确的答案。

所以我的问题是:如果您在属性声明中省略了关于 setter 语义(strong、weak、retain、assign)的关键字,那么在使用 ARC 时属性的默认属性是什么?

我在文档中发现默认的property属性是assign。但是,他们还说现在 ivars 的默认属性是 strong

为了更好地解释我的问题,这里有一个例子。我的头文件中有声明:

@property (nonatomic) MyClass *objectToUse;

在我们的实现中我们只有

@synthesize objectToUse;

如果我们然后在一些方法里面写:

self.objectToUse = [[MyClass alloc] init];

我们是否创建了强(保留)或弱(分配)引用?如果我们改写

objectToUse = [[MyClass alloc] init];

通过使用 ivar,我们是否改变了有关对象保留策略的情况?在我看来,现在使用 ARC,使用属性进行内存管理的最佳实践不再是相同的实践了。

最佳答案

我打开了一个技术支持事件。工程师确认默认值已从“assign”更改为“strong”。原因正是你描述的不一致。现在 ivars 和 @properties 具有相同的默认值。

他说文档(以及一些人收到的警告)都是错误的,将会被修复。 (转换工具是正确的。)在此之前,我会完全避免隐式默认值。始终明确指定“强”、“弱”或“分配”。

编辑:clang documentation现在正式记录此更改。

关于objective-c - ARC 迁移后更改属性和 ivars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com