C++ 与obj-c弱链接等一起丢失
我对这一点还不熟悉,也没有任何线索,我现在读了很多东西,但不知何故,它们似乎都没有解释这一点 我正在做一个游戏,但不知怎的我迷路了 GameSecene.h在界面中有以下声明:C++ 与obj-c弱链接等一起丢失,c++,objective-c,cocos2d-iphone,box2d,C++,Objective C,Cocos2d Iphone,Box2d,我对这一点还不熟悉,也没有任何线索,我现在读了很多东西,但不知何故,它们似乎都没有解释这一点 我正在做一个游戏,但不知怎的我迷路了 GameSecene.h在界面中有以下声明: Player *player; b2Body *b2PlayerBody; 在GameScene.mm(使用box2d,so need.mm)中,当我在函数中创建播放器(来自另一个类)时,我将此b2PlayerBody设置为我使用的主体,将其推送到播放器类并使用它 -(void) addPlayerAtPositio
Player *player;
b2Body *b2PlayerBody;
在GameScene.mm(使用box2d,so need.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是delta):
在player.h文件中,我有:
对……的贬低
- (void)update:(ccTime)dt withBody:(b2Body *)body;
在我的player.mm文件中
- (void)update:(ccTime)dt withBody:(b2Body *)body {
}
启动时,它在从GameSecene.mm更新时崩溃,没有任何错误文本
[player update:dt withBody:b2PlayerBody]; //update player
我做错了什么
还有谁能告诉我这两个问题之间的区别是什么(如果这是一个愚蠢的问题,请原谅)
b2Body*b2PlayerBody;
b2Body*b2PlayerBody;//我知道这是一个薄弱环节,但有什么区别。
b2Body b2PlayerBody
在释放方法中,这些链接方法对内存释放也有影响吗
b2Body * b2PlayerBody;
b2Body* b2PlayerBody;
b2Body *b2PlayerBody;
没有内存管理关键字(分别是“assign”属性)的实例变量(本例中的指针)称为“弱引用”。星号的位置没有区别,只是考虑您喜欢哪种样式。就个人而言,我更喜欢数据类型旁边的星号,而不是变量
弱链接仅指静态库,即您可以“弱链接”到Game Center,以便您的应用程序在没有Game Center的设备上运行。在这种情况下,您必须确保应用程序不会在没有GC的设备上调用任何GC方法
这些声明对内存管理没有影响。您负责根据需要分配和释放实例变量。在本例中,它是通过Box2DAPI完成的,即通过CreateBody和DestroyBody方法 我已经通过(b2Body)body{在方法和(b2Body)中解决了它在init中…仍然想知道…但是…对于ARC,实例变量不是弱引用,它们默认为
\uuuuu strong
引用。这可能会让将来学习ARC的人非常困惑,并且在\uuu弱
和弱链接
之间产生混淆。因此我否决了投票,因为这个问题没有足够的c对我的口味来说,这是一种刺激。
b2Body * b2PlayerBody;
b2Body* b2PlayerBody;
b2Body *b2PlayerBody;