Отправка указателя на свойство интерфейса в Objective-C - PullRequest
0 голосов
/ 28 октября 2010

Ладно, я хочу этот код:

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.Очевидно, что текущий код не работает.

Какой правильный синтаксис для / способа сделать это?

Ответы [ 3 ]

1 голос
/ 28 октября 2010

Я думаю , что правильный способ сделать это так:

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;
}
1 голос
/ 28 октября 2010

x является свойством Foo, а не переменной. Свойство - это просто сокращение для пары методов get / set. У него нет адреса как такового, и поэтому его нельзя передать, как вы пытаетесь.

Самый простой способ обойти локальную переменную:

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

Также обратите внимание, что вы используете &, а не *, чтобы получить адрес переменной.

0 голосов
/ 28 октября 2010

Параметры:

  • изменить Foo так, чтобы оно имело float * свойство
  • изменить +[staticClass bar:] так, чтобы он принимал и возвращал число с плавающей запятой, соответственно обновляя код клиента
  • используйте ivar_getOffset, чтобы найти расположение переменной экземпляра, поддерживающей x в вашем Foo экземпляре
...