我們公司的 APP 一開始是請外包團隊幫忙開發,後來才找正職工程師進去維護的。不得不說,那個外包團隊的 iOS APP 工程師素質真的不怎麼樣,程式碼裡頭用了許多應該避免的寫法,其中一個就是它們大量的使用 [XXXObject new]
。
[XXXObject new]
其實是一個語法糖,它實際上會幫你轉成 [[XXXObject alloc] init]
,那這樣會有什麼問題呢?問題在於,我們在 init 時通常都需要傳入一些參數,而且很多時候該物件的 designated initializer 並不是 init
。舉例來說,UITableViewController
是 initWithStyle:(UITableViewStyle)style
;UIView
是 initWithFrame:(CGRect)frame
。
所以偷懶用 new
的話,很有可能產生出來的物件會跟你預期的不一樣。我們的 APP 在 iOS 8 底下整個畫面爛掉,就是因為這個原因。