2010-08-26 59 views

回答

37

(我假設loggedIn是一個實例方法不採取參數)。首先,幾個術語問題:

  1. 他們'不是功能,他們是方法(同樣的想法,雖然)。
  2. 你不叫方法,你發送消息通常雖然相同的想法)。
  3. 最重要的是,我們通常不會向類發送消息,而是向這些類的實例發送消息。 (如果你不能想像的不同,想象將信函投入郵箱的想法與放置在您的郵箱一個字母,只有一個很有意義!)

所以,我們的新計劃先到實例化 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:)。噹噹!

+0

你需要添加一些東西放在myScript上 – JeremyP 2010-08-26 07:25:07

+0

@JeremyP:它在他的AppDelegate。 @ChristianStewart:Jeremy是對的,當你完成它的時候,你通常應該把'release'發送給'myScript'。我沒有告訴你,因爲我以爲你會在你的應用程序打開的時候使用它。 – andyvn22 2010-08-26 18:16:34

+0

養成良好習慣並沒有任何危害。從技術上講,你不需要釋放你的應用程序委託持有的任何東西,因爲應用程序委託本身一直保持到最後。但是,養成將版本放入-dealloc的習慣是個好主意。它需要變成自動的。 – JeremyP 2010-08-27 07:32:17

3

你應有SomeScript對象在你的AppDelegate類的初始化引用(假設你不需要SomeScript是一個Singleton類喜歡你的AppDelegate)。喜歡的東西:

SomeScript * myScript;

在你的AppDelegate接口伊娃,而在其application:DidFinishLaunchingWithOptions:

你inited它(讓我們使用默認分配/初始化組合調用假設):

myScript = [[SomeScript alloc] init]

完成所有這些,當您需要調用myScript的方法時,您只需執行以下操作:

[myScript myMethod:myParameter]

Here你可以從Apple找到適合初學者一個很好的引導

1

如果您不想使用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並執行您的選擇。

希望它可以幫助你們!

1

我們可以把它像[self loggedIn]
的loggedIn方法是SomeScript類,在最新的Xcode使用簡單的語法。

[[SomeScript new] loggedIn]; 
+0

這是否需要事後釋放?我假設沒有辦法...... – durazno 2016-01-02 14:18:04

+1

與ARC沒有取消分配要求。 – 2016-01-02 17:17:23