Objective c 使用Objective C访问Sprite in Touch事件

Objective c 使用Objective C访问Sprite in Touch事件,objective-c,ios,xcode,cocos2d-iphone,scope,Objective C,Ios,Xcode,Cocos2d Iphone,Scope,我试图使精灵移动到用户触摸的点。我的问题是我在init中声明精灵如下: CCSprite *ball = [CCSprite spriteWithFile:@"ball.png" rect:CGRectMake(0, 0, 20, 20)]; 在我的触摸事件中: - (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 我提到球,它说它是“未定义的”。由于我

我试图使精灵移动到用户触摸的点。我的问题是我在init中声明精灵如下:

CCSprite *ball = [CCSprite spriteWithFile:@"ball.png"                            
rect:CGRectMake(0, 0, 20, 20)];
在我的触摸事件中:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
我提到球,它说它是“未定义的”。由于我对其他语言的作用域的理解,我会假设我需要将“ball”作为一个全局变量,对吗?我已经读到,在objective-C中,全局变量通常是“不受欢迎的”。为什么会这样?它与记忆有关吗

如果你有什么建议,请在我的应用程序关闭时告诉我是否需要取消分配。我真的是iOS开发的初学者


任何建议都会大有帮助

在Objective C中,全局变量不仅是不受欢迎的,而且对于大多数语言来说,它们通常是不好的做法。这会导致糟糕的程序设计

一般来说,如果希望一个对象在其整个生命周期内(而不仅仅是在单个方法中)创建并继续访问另一个对象,则应将其分配给实例变量

在本例中,您似乎正在使用cocos2d,因此您的场景可能应该有一个ball实例变量。当场景解除分配时(如果不是之前),应该释放它(在目标C中不调用
dealloc


如果你不知道什么时候发布它,你可能会想阅读。首先,如果希望该实例变量不会使程序崩溃,则需要保留该精灵。

以下是如何使CCSprite在方法文件中全局可用:

// in .h
@interface HelloWorld : CCLayer
{
    CCSprite *ball;
}

然后您可以访问方法文件中的“ball”

谢谢您提供的信息,一些代码可能会有所帮助