【问题标题】:Passing a value from one object into another with Objective-C使用 Objective-C 将值从一个对象传递到另一个对象
【发布时间】:2009-03-30 16:57:28
【问题描述】:

我有一个名为 GameScene 的类,它是 cocos2d 场景的子类。

在那里我有两层。 GameLayer 和 ControlsLayer。您可能已经知道我希望 ControlsLayer 在 GameLayer 中移动内容。准确地说,我试图从 ControlsLayer 控制 GameLayer 中的 cPBody。

目前,我正在尝试从 ControlsLayer 路由指令,返回到 GameScene,然后返回到 GameLayer。如果这是有道理的。无论如何,我无法让它工作。我有 PHP 背景,所以我认为我错误地将我的 PHP 经验应用于 Obj-C。

我的想法是,我应该能够使用类似的东西访问类/对象中的属性

aThing *someThing = someInstance->aThing;

从我一直在查看的示例代码看来,这应该可以工作。但事实并非如此。这是代码,尽可能精简为http://pastebin.com/d49c9d0be

而不是知道如何解决这个特定问题,问题是,我不明白什么?

【问题讨论】:

  • 在 pastebin 代码中,您是想创建一个名为 myBody 的局部变量,还是为类中的变量赋值?
  • 不太清楚你的意思。如果您说的是 GameScene init 方法内部,那么目前我只是尝试访问 GameLayer 内部的 myBody 属性而不会产生错误。
  • 局部变量在函数或方法内部;实例变量位于类的实例中,并在该类的接口中声明。

标签: objective-c cocoa cocoa-touch cocos2d-iphone


【解决方案1】:

在 Objective-C 中,您需要定义访问器方法来获取实例变量,除非您从相同的类类型调用它(例如,当您实现 NSCopying协议并且需要设置私有变量,但现在不用担心)。

最简单的方法是使用@property(retain) SomeClass *name; 在标头中定义一个属性,并通过在您的实现中放入@synthesize name = instanceVariable; 让Objective-C 生成它。然后,您可以使用object.name;[object name]; 访问该类之外的变量。有关更多信息,请查看属性和面向对象编程的文档。

【讨论】:

  • 请记住,如果您声明 @property(retain) SomeClass * 名称,您还必须在您的 -(void)dealloc 方法中 [释放名称]
【解决方案2】:

您没有以任何形式公开 gameLayer.myBody 属性。你必须使用@property 声明(假设objective-c 2.0)(这里是example)。

我没有任何PHP背景,所以我不知道在PHP中可能会有什么不同。

【讨论】:

    【解决方案3】:

    访问对象中属性的正确方法如下:

    aThing * someThing = someInstance.aThing; // new style
    

    aThing * someThing = [someInstance aThing]; // old style
    

    如果您使用 c 进行编码,-> 运算符将是有意义的。然而,在 Objective-c 中,对象总是通过指针传递。没有objective-c 变量实际上保存了一个对象,它们只是保存了指向对象的指针。语言设计者只是决定使用[]. 语法来访问成员,所以这就是我们必须做的!

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多