2012-10-16 56 views
0

誰能告訴我這行代碼呢?Objective-C的對象調用

self.viewController = [[MainViewController alloc] init]; 

viewController已經是一個CDVViewController對象,所以我不太確定它對MainViewController:S做了什麼?

任何幫助將是巨大的

感謝

回答

0

這行簡單創建一個新的對象,類MainViewController的實例,並保存其在可變的viewController指針。

+0

但我不明白的的viewController已指向CDVViewController:S –

+0

此外,如果多數民衆贊成的情況下,我將如何訪問一些從在的viewController的MainViewController變量和方法?它會像self.viewController [MainViewController.test = self.test]; ?? –

+0

如果viewController已經包含一個指向對象的指針,舊指針將被新指針替換。 – iSofTom

0

首先,它創建和初始化一個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 

根據您的代碼,避免泄漏。

+0

所述的viewController被聲明爲: @property(非原子,保留)* CDVViewController的viewController 後這行代碼完成: self.viewController = [[MainViewController的alloc] INIT]; 我將如何設置MainViewController財產? 試圖做self.viewController.token = @ 「你好」; 結果錯誤,指出令牌不CDVViewController的特性:S。 –

+0

((MainViewController *)(self.viewController))標記= @ 「你好」。所以編譯器不會哭。但是,如果你的viewController實際上是一個MainViewController *,首先要控制它,如果不是這樣的話,那麼你的程序也會哭泣。 *** -_-順便說一句,你不應該聲明CDVViewController *,如果情況並非總是如此。 -_- *** –

+0

哦,好的,謝謝。我不明白的是,這一切都完成了,從一個快速的谷歌我的理解是,CDVViewController聲明,然後我們也可以啓動MainViewController爲了使用多態性,所以MainViewController可以重寫某些方法,否則會做通過CDVViewController。然而MainViewController已經繼承CDVViewController,因此可能的ViewController不被聲明爲MainViewController代替CDVViewContoller,是不是會以同樣的方式工作? –