使用ARC for iOS时,以下是否有任何区别?

@property (strong, nonatomic) NSObject *someProperty;
...
@synthesize someProperty;

//and then in the init method, either:
self.someProperty = aProperty;

//or
someProperty = aProperty;

我知道没有ARC,self.someProperty实际上是调用合成的setter方法,该方法向对象发送一条retain消息。 但是现在使用ARC,如果我使用点符号设置这样的属性是否重要?

更一般地说,ARC真的意味着我根本不必担心引用计数吗? 或者在某些情况下,我编写代码的方式可能会导致ARC出错?

===============>>#1 票数:6 已采纳

区别与没有ARC的情况相同:通过使用点表示法,您调用合成的setter,并通过直接分配给ivar,您将使用setter方法。

在ARC下,两个选项之间的内存管理没有差异,但你仍然应该在两个选项之间做出有意识的决定:例如,直接分配到ivar旁路KVO,而通过setter方法稍微慢但可能更安全在大多数情况下,例如,当您稍后决定使属性成为atomic或覆盖设置器时。

就个人而言,我总是会使用属性表示法self.abc = ...; 除了可能在init ,通常需要绕过KVO。 简而言之,使用您在ARC之前使用的相同推理。

  ask by maxedison translate from so

未解决问题?本站智能推荐:

1回复

使用ARC时重新分配属性

我有一个带有各种控件的表单。 这些控件之一使用户可以通过在点击控件后出现的模式视图来更改要提交的表单的类别。 当用户选择更改表单的类别时,表单需要根据新的类别重新显示控件。 除了从窗体的视图中删除以前的控件之外,对于要丢弃的控件,我是否还需要担心什么? 考虑表单实现的以下方法:
2回复

消息发送到解除分配的实例 - 视图作为属性

在我的应用程序中,您单击一个显示另一页面的按钮。 每当您单击视图上的按钮时,它都会崩溃并显示: 按钮上的IBAction : 在.h文件中,我有一个前向类声明并设置属性: 我不确定这里发生了什么!
1回复

使用ARC返回自动释放的对象

假设我在A类中编写了以下代码: 在类BI中,以这种方式在某个范围内获取该列表: 考虑到returnList是使用autorelease方法分配的,我怎样才能保证我不会丢失使用ARC的引用(我不能使用retain )? 我是否必须在myNames数组上使用[[NSArray al
1回复

在完成dealloc之前,对要释放的对象的弱引用为nil

假设B对A的引用很弱,而A对B的引用很强 在A的dealloc中 在B的foo中 为什么弱引用在完成dealloc之后不为零? 这是什么原因,我可以预防吗? 在dealloc之前是否有某种被调用的方法?
1回复

使属性线程安全

我有一个属性(原子的,保留的)NSString * identifier,可以从多个线程中读取。 因此,这是使其线程安全的正确方法- 要么 实际上,我想知道关键参数的用途是@synchronize(key)。 感谢您的帮助。
1回复

关于dispatch_async和nsdata的xcode ios ARC(自动引用计数)

我有一个关于xcode ARC的初学者问题。 以下代码在没有内存问题的情况下工作,因为ARC释放了内存。 但是,以下没有,并在几秒钟后给出了内存分配错误。 我对ARC有错误的理解吗? 我虽然testDataLocal只计算一次但是当方法退出时超出范围。 testData是
2回复

如果我将指针设置为nil,自动引用计数是否释放对象?

如果我将指针设置为nil或将指针指定给另一个对象,自动引用计数是否释放对象? 例如做类似的事情: 如果此代码泄漏,我将如何正确声明* currentView? 或者我如何让ARC“释放”当前视图? 谢谢!
1回复

使用自动引用计数问题通过隐式转换指针获取错误

我收到错误ARC不允许将Objective-C指针隐式转换为'void' 任何人都可以帮我解决这个错误 谢谢
1回复

垃圾收集和引用计数如何在Xamarin中携手合作

Xamarin拥有自己的内存管理工具Garbage Collector,因为它使用C#。 在开发iOS应用程序时参考计数进入画面。 我真的无法理解这两种内存管理技术如何协同工作。 因为某些对象可以在其持有Objective对象时导致内存泄漏,悬空指针等时收集垃圾。反之亦然。
2回复

Objective-C中非合成属性的弱/强注释

从Objective-C 2.0开始,我们有了一个属性 ,一个很好的语法来获取和设置实例变量的值。 由于Clang 3.1所有非动态的属性,不具有显式getter的readonly或没有自定义getter和setter,都会自动合成到ivars。 而且,由于ARC,我们对属性使用弱/强注释