我想使用 - >设置ivar操作者

时间:2012-06-28 15:18:29

标签: objective-c ios ivar

我想使用 - >设置ivar运营商。我收到一个错误:无法静态分配接口类型。我不想要点操作符。

 @interface Dream : NSObject

 @property (nonatomic, assign) BOOL isBeer;

 @end

Class ViewController

 - (void)viewDidLoad
{
 [super viewDidLoad];

  Dream dr1;
  (&dr1)->isBear = YES;
 }

2 个答案:

答案 0 :(得分:2)

您在声明中缺少'*':

Dream *dr1;

这是编译器错误的原因。

在Objective-C中,对象仅由指针引用,就像用new()创建的C ++实例一样。

另请注意,对于Objective-C对象,' - >'(箭头)和'。'(点)之间的区别与C ++对象/ C结构相同。在C / C ++中,您使用点来访问堆栈变量的成员,例如:

// Stack
MyClass myObject;
myObject.memeber = 1; 

MyStruct info;
info.member = 1;


// Heap
MyClass* pMyObject = new MyClass();
myObject->memeber = 1; 

MyStruct* pInfo = (MyStruct*) malloc(sizeof(MyStruct));
pInfo->member = 1;

而在Objective-C中,所有对象都是堆(仅由指针引用),因此您只能使用箭头访问成员。

另一方面,点有一个不同的含义调用属性的getter / setter,可能会被ivar支持。(取决于内部)

答案 1 :(得分:1)

您需要将实例变量设为公共:

@interface Dream : NSObject
{
@public
    BOOL isBeer;
}
@end

Class ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    Dream *dr1 = [[Dream alloc] init];
    dr1->isBeer = YES;
}