2010-10-28 44 views
0

確定,所以我想-roughly-此代碼:Objective-C中發送一個指向接口屬性

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類的一個屬性。顯然目前的代碼不起作用。

什麼是正確的語法/方式來做到這一點?

+0

它不應該是' - ( void)bar:(float *)argVar',它應該是'+(void)bar:(float *)argVar' – 2010-10-28 11:25:14

回答

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; 
} 
1

xFoo的財產,而不是一個變量。一個屬性只是一對get/set方法的簡稱。它沒有地址,因此不能像你正在做的那樣傳遞。

最簡單的解決辦法是要經過一個局部變量:

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

另外請注意,您使用&,不*,採取變量的地址。

+0

它們是花車,不是雙打:) – 2010-10-28 11:24:13

+0

糟糕!固定。 :-) – 2010-10-28 11:28:06

+0

工程就像一個魅力!謝謝 :) – Art 2010-10-28 11:33:09

0

選項:

  • 變化Foo,使其具有float *財產
  • 變化+[staticClass bar:]這樣,它需要並返回一個float,更新您的客戶端代碼相應
  • 使用ivar_getOffset找到實例變量後盾x的位置在Foo實例