我想使用 - >设置ivar运营商。我收到一个错误:无法静态分配接口类型。我不想要点操作符。
@interface Dream : NSObject
@property (nonatomic, assign) BOOL isBeer;
@end
Class ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
Dream dr1;
(&dr1)->isBear = YES;
}
答案 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;
}