誰能告訴我這行代碼呢?Objective-C的對象調用
self.viewController = [[MainViewController alloc] init];
viewController已經是一個CDVViewController對象,所以我不太確定它對MainViewController:S做了什麼?
任何幫助將是巨大的
感謝
誰能告訴我這行代碼呢?Objective-C的對象調用
self.viewController = [[MainViewController alloc] init];
viewController已經是一個CDVViewController對象,所以我不太確定它對MainViewController:S做了什麼?
任何幫助將是巨大的
感謝
這行簡單創建一個新的對象,類MainViewController的實例,並保存其在可變的viewController指針。
首先,它創建和初始化一個MainViewController *對象,那麼它把它分配給[自setViewController:]。 self.viewController實際上是對自設定器方法的調用,而不是一個簡單的指針分配(不喜歡的viewController = [[MainViewController的alloc] INIT],如果的viewController不是的ivar)。
取決於你如何產生用@property聲明二傳手,但讓我們說這是一個
@property(nonatomic, retain)*UIViewController viewController
你得到這樣的形式創建免費生成setter方法:
- (void)setViewController:(UIViewController*)controller{
if(viewController != controller){
[viewController autorelease];
viewController = [controller retain];
}
}
所以如果你的viewController是一個CDVViewController *對象,它現在與一個新的CDVViewController *對象交換。現在釋放CDVViewController *並保留CDVViewController並將其分配給viewController ivar。
順便說一句,如果你只是完成任務,你就應該這樣做:
[viewController release]; // if it was before a CDVViewController
self.viewController = [[MainViewController alloc] init];
隨着留置物
self.viewController = [[[MainViewController alloc] init] autorelease]; // it will be retained in the setter, so you must free it
根據您的代碼,避免泄漏。
所述的viewController被聲明爲: @property(非原子,保留)* CDVViewController的viewController 後這行代碼完成: self.viewController = [[MainViewController的alloc] INIT]; 我將如何設置MainViewController財產? 試圖做self.viewController.token = @ 「你好」; 結果錯誤,指出令牌不CDVViewController的特性:S。 –
((MainViewController *)(self.viewController))標記= @ 「你好」。所以編譯器不會哭。但是,如果你的viewController實際上是一個MainViewController *,首先要控制它,如果不是這樣的話,那麼你的程序也會哭泣。 *** -_-順便說一句,你不應該聲明CDVViewController *,如果情況並非總是如此。 -_- *** –
哦,好的,謝謝。我不明白的是,這一切都完成了,從一個快速的谷歌我的理解是,CDVViewController聲明,然後我們也可以啓動MainViewController爲了使用多態性,所以MainViewController可以重寫某些方法,否則會做通過CDVViewController。然而MainViewController已經繼承CDVViewController,因此可能的ViewController不被聲明爲MainViewController代替CDVViewContoller,是不是會以同樣的方式工作? –
但我不明白的的viewController已指向CDVViewController:S –
此外,如果多數民衆贊成的情況下,我將如何訪問一些從在的viewController的MainViewController變量和方法?它會像self.viewController [MainViewController.test = self.test]; ?? –
如果viewController已經包含一個指向對象的指針,舊指針將被新指針替換。 – iSofTom