2014-01-06 12 views
0

我是Objective-C的新手...希望標題中的術語是正確的...但無論如何。我正在學習一個教程,並且在某些指針的實例出現的時候有點困惑。我從來沒有看到他們明確定義,然後教程將修改它們。舉個例子,看下面(我試圖只包括必要的代碼,我把星號*旁邊的線我最困惑。基本上我不知道哪裏_meta_hud來自以及如何可以調用他們的方法,如果他們是hudmeta,沒有_),我想我會不那麼困惑。謝謝,對不起,如果這是一個業餘愛好者的問題。Objective-C無法知道指針的實例來自何處

@interface PlayGameLayer() 

@property (strong) CCTMXLayer *meta; 
@property (strong) HudLayer *hud; 

@end 

+(CCScene *) scene 
{ 
    CCScene *scene = [CCScene node]; 
    PlayGameLayer *layer = [PlayGameLayer node]; 
    [scene addChild: layer]; 
    HudLayer *hud = [HudLayer node]; 
    [scene addChild:hud]; 
    layer.hud = hud; 

    return scene; 
} 

-(id) init 
{ 
    if((self=[super init])) { 

    .... 

    self.meta = [_tileMap layerNamed:@"Meta"]; 
    _meta.visible = NO; ********************************************** 

    .... 


    } 
    return self; 
} 

-(void)setPlayerPosition:(CGPoint)position { 
    CGPoint tileCoord = [self tileCoordForPosition:position]; 
    int tileGid = [_meta tileGIDAt:tileCoord]; 
    if (tileGid){ 
     NSDictionary *properties = [_tileMap propertiesForGID:tileGid]; 
     if (properties){ 
      NSString *collectible = properties[@"Collectable"]; 
      if (collectible && [collectible isEqualToString:@"True"]) 
      { 
       [_meta removeTileAt:tileCoord]; **************************************** 
       self.numCollected++; 
       [_hud numCollectedChanged:_numCollected];********************************* 
      } 
     } 
    } 

    _player.position = position; 
} 


@implementation HudLayer 
{ 
    CCLabelTTF *_label; 
} 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 

     .... 

    } 
    return self; 
} 

@end 

回答

3

實例變量_meta_hud隱式由編譯器產生的,作爲您的屬性定義結果:

@property (strong) CCTMXLayer *meta; 
@property (strong) HudLayer *hud; 

這是一個相當新的除了Objective-C的。您以前需要在.m文件中使用@synthesize才能創建相應的實例變量。但是,從Xcode 4.4開始,如果您沒有爲屬性包含@synthesize,編譯器會自動爲您生成一個。爲了您的屬性,它含蓄地產生:

@synthesize meta = _meta; 
@synthesize hud = _hud; 

下面是一個article有更多的細節,如果你有興趣。

+0

非常感謝!我知道這種性質必須繼續=) – spaderdabomb

+0

而且,在你需要添加@synthesize之前,你需要明確聲明實例變量。過去五年來我們走過了很長的一段路。 – Chuck

相關問題