3 回答

TA貢獻1880條經驗 獲得超4個贊
使用self會導致您的類的“設置者”被調用,而不是直接更改ivar。
self.mainViewController = aController;
等效于:
[self setMainViewController:aController];
另一方面:
mainViewController = aController;
只需mainViewController直接更改實例變量,就可以跳過UIApplication setMainViewController方法中可能內置的任何其他代碼,例如釋放舊對象,保留新對象,更新內部變量等。
在訪問框架的情況下,您仍在調用setter方法:
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
擴展為:
[[mainViewController view] setFrame:[[UIScreen mainScreen] applicationFrame]];
理想情況下,為了將來驗證您的代碼,也應該在檢索此值時也使用self.mainViewController(或[self mainViewController])。通常,類在其“ getter”方法中比在其“ setters”中具有重要代碼的可能性要小得多,但是直接訪問仍然有可能在將來的Cocoa Touch版本中破壞某些功能。

TA貢獻1995條經驗 獲得超2個贊
該self
關鍵字表明您正在使用屬性的getter / setter方法,而不是直接訪問值。如果讓您使用同步功能自動生成getter / setter,則在第一個示例中必須使用self,因為對象保留在此處,而不僅僅是指針分配的對象。

TA貢獻1848條經驗 獲得超2個贊
除了在自己的getter和setter方法內部(如果您編寫自己的方法)之外,您應該始終使用self。這樣,可以自動為您處理對象保留。您還可以提供自定義代碼來執行諸如驗證iVar之類的操作,或者保留自零的功能。除了getter和setter方法之外,幾乎沒有任何直接訪問iVar的理由。雖然,許多人通常是出于錯誤或懶惰。
- 3 回答
- 0 關注
- 569 瀏覽
添加回答
舉報