2012-11-10 47 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