【问题标题】:Sending a pointer to an interface property in Objective-C在 Objective-C 中发送指向接口属性的指针
【发布时间】:2010-10-28 11:17:28
【问题描述】:

好的,所以我 - 大致 - 想要这个代码:

test1.m:

Foo *foo = [[Foo alloc] init];
foo.x = 1.0f;

[staticClass bar:*foo.x];

staticClass.m:

-(void)bar:(float *)argVar
{
  *argVar += 1.0f;
}

所以我将 argVar 指向 Foo 类的属性。显然,当前代码不起作用。

执行此操作的正确语法/方式是什么?

【问题讨论】:

  • 不应该是-(void)bar:(float *)argVar,应该是+(void) bar:(float *) argVar

标签: iphone objective-c pointers reference instance


【解决方案1】:

认为正确的做法是:

float tmp = foo.x;
[staticClass bar:&temp];
foo.x = tmp;

StaticClass.m 应该如下所示:

+(void) bar:(float *) argvar // < not plus instead of minus, denotes static method
{
     *argVar = 1.0f;
}

【讨论】:

    【解决方案2】:

    xFoo 的属性,而不是变量。属性只是一对 get/set 方法的简写。它没有地址,因此不能像您尝试的那样传递。

    最简单的解决方法是通过局部变量:

    float d = foo.x;
    [staticClass bar:&d];
    foo.x = d;
    

    另请注意,您使用&amp;,而不是*,来获取变量的地址。

    【讨论】:

    • 他们是花车,不是双打:)
    • 像魅力一样工作!谢谢:)
    【解决方案3】:

    选项:

    • 更改Foo 使其具有float * 属性
    • 更改+[staticClass bar:],使其接受并返回一个浮点数,相应地更新您的客户端代码
    • 使用ivar_getOffset 在您的Foo 实例中查找支持x 的实例变量的位置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多