2012-03-23 92 views
0

我是新來的,沒有線索,我現在讀了很多東西,但不知何故,他們似乎都錯過了解釋。與obj-c薄弱環節等丟失

我正在做一個遊戲thingy進入它,但不知何故我迷路了。

GameScene.h在這種接口的一個了以下聲明:

Player *player; 
b2Body *b2PlayerBody; 

的GameScene.mm內(使用Box2D的,所以需要.mm)當在功能我創建的播放器(它來自另一個類)我將這個b2PlayerBody設置爲我使用過的身體,將其推送給玩家類並使用它。

-(void) addPlayerAtPosition:(CGPoint)p 
{ 
    CCLOG(@"Adding player at %0.2f x %02.f",p.x,p.y); 

    // Player 
    player = [[Player alloc] initWithPosition:ccp(p.x, p.y)]; 
    player.anchorPoint = ccp(0,0.5); 
    [self addChild:player z:10 tag:kTagPlayerNode]; 



    // Define the dynamic body. 
    //Set up a 1m squared box in the physics world 
    b2BodyDef bodyDef; 
    bodyDef.type = b2_dynamicBody; 
    bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO); 
    b2PlayerBody = world->CreateBody(&bodyDef); 

    // Define another box shape for our dynamic body. 
    b2PolygonShape dynamicBox; 
    dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box 

    // Define the dynamic body fixture. 
    b2FixtureDef fixtureDef; 
    fixtureDef.shape = &dynamicBox; 
    fixtureDef.density = 1.0f; 
    fixtureDef.friction = 0.3f; 
    b2PlayerBody->CreateFixture(&fixtureDef); 
    [player setPhysicsBody:b2PlayerBody]; 
} 

在這個文件我稱之爲我的更新方法(dt爲增量):

[player update:dt withBody:b2PlayerBody]; //update player 

在player.h文件我有: 爲

- (void)update:(ccTime)dt withBody:(b2Body *)body; 

和declatration裏面player.mm文件我有

- (void)update:(ccTime)dt withBody:(b2Body *)body { 

} 

啓動時,它崩潰從GameScene.mm更新沒有任何錯誤文本

[player update:dt withBody:b2PlayerBody]; //update player 

我在做什麼錯?

也可以有人epxlain對我來說有什麼區別(對不起,如果這是一個愚蠢的Q)

b2Body * b2PlayerBody之間; b2Body * b2PlayerBody; //我知道這是一個薄弱環節,但差異是什麼。 b2Body b2PlayerBody;

也做這些鏈接方法對釋放方法的內存釋放有影響嗎?

+0

我已經解決了(b2Body *)body {在方法和(b2body *)在init ...仍然想知道雖然... – renevdkooi 2012-03-23 05:57:02

回答

-1
b2Body * b2PlayerBody; 
b2Body* b2PlayerBody; 
b2Body *b2PlayerBody; 

沒有內存管理關鍵字(分別爲「assign」屬性)的實例變量(本例中爲指針)稱爲「弱引用」。星號的放置沒有任何區別,純粹是考慮您喜歡哪種風格。就個人而言,我更喜歡數據類型旁邊的星號,而不是變量。

弱連接僅指靜態庫,即您可以與Game Center「薄弱環節」,以便您的應用在沒有Game Center的設備上運行。在這種情況下,您必須確保應用程序不在沒有GC的設備上調用任何GC方法。

這些聲明對內存管理沒有影響。您有責任根據需要分配和釋放實例變量。在這種情況下,它通過Box2D API完成,即通過CreateBody和DestroyBody方法。

+0

與ARC,實例變量不是弱引用,他們默認到'__strong'引用。這可能會讓將來學習ARC的人感到困惑,並且會在'__weak'和'weak linking'之間產生混淆。所以我反對投票,因爲這個問題對我的口味沒有足夠的清晰度。 – 2012-03-24 14:02:21