I'm playing around with some code in a Kobold2D example project (Orthogonal Tile based Game) and I've noticed:

```
@interface TileMapLayer : CCLayer //Map
{
    float tileMapHeightInPixels; //depricated@interface TileMapLayer()  
}
@end

```

in the TileMapLayer.h file, and:

```
@interface TileMapLayer()
@property (strong) HUDLayer *hud;
@property (strong) CCTMXTiledMap *tileMap;
@property (strong) CCTMXLayer *background;
@property (strong) CCTMXLayer *foreground;
@property (strong) CCTMXLayer *meta;
@property (strong) CCTMXLayer *base;
@property (strong) CCSprite *player;
@property (strong) CCSprite *playerTurret;
@property (assign) int money;
@end

```

in the TileMapLay.m file.

I've always thought that `.h` files hold interfaces and `.m` files store implementations

Can someone please explain their purpose (started from the basics, I'm still learning Objective C) and what the difference in purpose between the 2 examples above?
['https://Stackoverflow.com/questions/17735526', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/-1/']
What you put in a header and implementation file is entirely up to you. They all get concatenated by the preprocessor before compilation anyway. It's convention to put external interfaces that other compilation units might want to use into header files. The person who wrote your example code intends to keep all of those properties defined in the `.m` file private - that is they're intended to not be directly accessed by other code in the system.
Things defined in .h can be used by any .m files as long as the .m includes the .h. But things defined in .m can only be used in current .m file.