2015-05-04 36 views
1

下面的文檔具有下面的示例代碼:何時發佈GKGameCenterViewController?

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/LeaderBoards/LeaderBoards.html#//apple_ref/doc/uid/TP40008304-CH6-SW9

清單4-9顯示了遊戲中心的用戶的排行榜頁面 接口

- (void) showLeaderboard: (NSString*) leaderboardID 
{ 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) 
    { 
     gameCenterController.gameCenterDelegate = self; 
     gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
     gameCenterController.leaderboardTimeScope = GKLeaderboardTimeScopeToday; 
     gameCenterController.leaderboardCategory = leaderboardID; 
     [self presentViewController: gameCenterController animated: YES completion:nil]; 
    } 
} 

當你打電話GKGameCenterViewController上的「發佈」?是否只有在視圖控制器被解散後,或者你可以在該方法結束時調用它?或者應該只是調用autorelease?

回答

0

該項目使用自動引用計數,因此您不需要顯式聲明release或dealloc。作爲參考,它在視圖離開視圖層次結構後解除分配。

+0

我的項目不使用弧。這是否意味着我應該只使用autorelease? –

+0

我不太熟悉非弧形項目,對不起。由於弧現在是標準,因此可以使用-fobjc-arc直接在非弧項目中使用弧。同樣,您可以使用-fno-objc-arc在弧項目中使用非弧。只需在編譯源代碼階段將其作爲標誌添加到每個文件中即可。 – Schemetrical

0

我找不到任何文檔來支持這個(因爲所有的Apple文檔現在都採用了ARC),但是我從ARC之前的日子回憶起,您在呈現模式視圖控制器後纔會發佈它。我相當肯定,呈現視圖控制器將強烈參考呈現的視圖控制器。所以:

- (void) showLeaderboard: (NSString*) leaderboardID 
{ 
    GKGameCenterViewController *gameCenterController = [[GKGameCenterViewController alloc] init]; 
    if (gameCenterController != nil) 
    { 
     gameCenterController.gameCenterDelegate = self; 
     gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
     gameCenterController.leaderboardTimeScope = GKLeaderboardTimeScopeToday; 
     gameCenterController.leaderboardCategory = leaderboardID; 
     [self presentViewController: gameCenterController animated: YES completion:nil]; 
     [gameCenterController release]; 
    } 
} 

更好的答案可能是「使用ARC」。 :)嚴重的是,ARC規則。

+0

不會autorelease更安全嗎?還是沒有必要? –

+0

在這種情況下,不需要autorelease。 – zpasternack

+0

不,不是的 - 我的意思是,而不是使用發佈,使用autorelease,所以它只發布池時釋放。 –