這裏是我的Objective-C類:另一個類的Objective-C調用函數?
AppDelegate
SomeScript
我會如何調用該函數的loggedIn上SomeScript類從應用程序委託方或任何其他類?
感謝, 基督教斯圖爾特
這裏是我的Objective-C類:另一個類的Objective-C調用函數?
AppDelegate
SomeScript
我會如何調用該函數的loggedIn上SomeScript類從應用程序委託方或任何其他類?
感謝, 基督教斯圖爾特
(我假設loggedIn
是一個實例方法不採取參數)。首先,幾個術語問題:
所以,我們的新計劃先到實例化 SomeScript,然後發送消息到實例。
SomeScript* myScript = [[SomeScript alloc] init]; //First, we create an instance of SomeScript
[myScript loggedIn]; //Next, we send the loggedIn message to our new instance
這很好。然而!我敢打賭,你希望你的腳本可以繼續使用。因此,我們應該真的讓它成爲應用程序委託的實例變量。所以,而是在AppDelegate中。h時,添加此花括號裏:
SomeScript* myScript;
現在我們的變量將堅持圍繞,而我們從之前第一線變得簡單:
myScript = [[SomeScript alloc] init];
最後併發症:我們不希望創建一個新的腳本每次我們撥打loggedIn
(我假設)!因此,您應該將實例化放置在只運行一次的地方(例如,application:DidFinishLaunchingWithOptions:
)。噹噹!
你應有SomeScript對象在你的AppDelegate類的初始化引用(假設你不需要SomeScript是一個Singleton類喜歡你的AppDelegate)。喜歡的東西:
SomeScript * myScript;
在你的AppDelegate接口伊娃,而在其application:DidFinishLaunchingWithOptions:
你inited它(讓我們使用默認分配/初始化組合調用假設):
myScript = [[SomeScript alloc] init]
完成所有這些,當您需要調用myScript的方法時,您只需執行以下操作:
[myScript myMethod:myParameter]
Here你可以從Apple找到適合初學者一個很好的引導
如果您不想使用SomeScript的實例...您可以採用不同的方法。使用NSNotificationCenter向SomeScript對象發送通知,並在此之後運行選擇器。
在你 - (無效)awakeFromNib {}方法,從SomeScript將下面的代碼:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mySelector:)
name:@"aUniqueNameForTheNotification"
object:nil];
創建方法 「mySelector:」 並把來電轉接到您的loggedIn方法。 (或者,如果你願意,你可以取代「mySelector:」用的loggedIn直接)
-(void) mySelector:(id)elem
{
[self loggedIn];
}
然後不要忘記去除dealloc的觀察者,所以將下面的代碼在你的SomeScript類也:
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
然後你就可以像這樣從任何其他發出通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"aUniqueNameForTheNotification" object:self];
這代碼最後一塊發送通知SomeScript並執行您的選擇。
希望它可以幫助你們!
我們可以把它像[self loggedIn]
當的loggedIn方法是SomeScript類,在最新的Xcode使用簡單的語法。
[[SomeScript new] loggedIn];
這是否需要事後釋放?我假設沒有辦法...... – durazno 2016-01-02 14:18:04
與ARC沒有取消分配要求。 – 2016-01-02 17:17:23
你需要添加一些東西放在myScript上 – JeremyP 2010-08-26 07:25:07
@JeremyP:它在他的AppDelegate。 @ChristianStewart:Jeremy是對的,當你完成它的時候,你通常應該把'release'發送給'myScript'。我沒有告訴你,因爲我以爲你會在你的應用程序打開的時候使用它。 – andyvn22 2010-08-26 18:16:34
養成良好習慣並沒有任何危害。從技術上講,你不需要釋放你的應用程序委託持有的任何東西,因爲應用程序委託本身一直保持到最後。但是,養成將版本放入-dealloc的習慣是個好主意。它需要變成自動的。 – JeremyP 2010-08-27 07:32:17