2012-11-10 52 views
0

我注意到大多数人来说,初始化CAShapeLayer使用时:差之间[CAShapeLayer页头] INIT]和[CAShapeLayer层]

CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 

而不是使用初始化:

CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 

我我想知道使用这两种方法有什么特别的区别,或者哪一种通常更好?

回答

3

第一个返回一个自动释放对象。由于它是自动发布的,你不是它的所有者。当autorelease池(它驻留的池)被释放时,该对象会自动释放给你。

第二个返回+1保留计数的对象。您是该物体的所有者,因此需要对release负责。但是 - 使用ARC,您可能不需要拨打电子邮件release,因为它对我们来说很重要。

相关链接:

  1. Objective C Method Families
  2. Basic Memory Management Rules
+0

谢谢,我已经知道的内存管理的影响,但不明白为什么与CALayers人用[CALayer的层]代替分配一个新的对象。是否用于缓存目的? –

+0

手动内存管理:由于第一种方法返回autorelease对象,它会自动释放,我们通常在单独的方法实现中执行此操作。这是因为我们不需要在其上调用'release'。而如果你做了alloc + init,你需要释放它,对吧?否则,您将在创建对象时泄漏内存并且未释放内存。但是,使用ARC则无关紧要。 – 2012-11-10 15:32:27

+0

@StackOverFlowRider。我认为你误解了[CALayer图层]的作用。它确实分配/初始化一个新对象 - 唯一的区别是内存管理效果。 – rdelmar