2009-10-08 45 views
0

在我的應用程序委託中,我有一個變量,各種控制器使用(感謝新聞組建議如何從控制器訪問此類變量)。每個控制器可能需要多次訪問它。我用這個代碼:iPhone SDK:速度與內存的差距

 
((MyAppDelegate *) [UIApplication sharedApplication].delegate).soundEffects 

忽略可讀取的問題(如noneone等他們我永遠不會看到這些SRC),它會改變什麼,如果在控制器初始化我有我獲得一個指向應用程序的委託對象並訪問它像這樣:

 
... 
MyAppDelegate *foo = [UIApplication sharedApplication].delegate 
... 
foo.soundEffects ... 

它看起來像第二種方法需要更多的MEM存儲空間來保存實例變量foo的,而我的第一種方法可能會比較慢去的變量。

有什麼更好?

謝謝

回答

0

在這種情況下,您不必擔心速度或內存。在知道自己有問題之前,先抵制優化的誘惑。即使您是唯一閱讀代碼的人,您也可以更專注於代碼的可讀性。精心設計的代碼更易於閱讀和維護,故障發生率更低,並且如果發現自己面臨速度或內存問題,將會更容易優化。如果它讓您的代碼更易於閱讀,請毫不猶豫地在這裏和那裏犧牲幾個字節。

在這種情況下,您提出的更改無疑是朝着正確方向邁出的一步,因此請繼續前進,並根據需要進行此次增量更改。

如果你覺得大膽,想要朝正確的方向邁出一步,可以將soundEffects成員變量添加到每個需要它的控制器,使用@property(nonatomic,retain)將其設置爲屬性,並設置在您構建每個控制器之後(在您的應用程序委託的應用程序中:didFinishLaunchingWithOptions :,以及您可能在構建這些控制器的任何地方),該屬性。這樣你的控制器甚至不需要知道應用程序委託的存在。這種「鬆散耦合」是一種面向對象的設計優點,可以最大限度地減少對象之間的依賴關係,使其更容易維護。

+0

還要記住,編譯器非常擅長優化代碼,並且很有可能它會以任何方式生成相同的代碼。如上所述,選擇最易讀的代碼,使用工具確定性能優化的位置。 – zaph 2009-10-08 11:38:39

+0

謝謝,cduhn。聽起來像我在第2版中爲我剪下的作品:) – leon 2009-10-08 16:07:43