Objective c 错误:应为标识符或';(';之前';公共';-目标C

Objective c 错误:应为标识符或';(';之前';公共';-目标C,objective-c,Objective C,当我将实例变量声明为 @interface FOO : NSObject { @public int a; } @public -(id)init; -(void)dealloc; @end 错误:“public”之前的预期标识符或“(”您没有在接口定义之外使用@public或其他访问关键字,因为您没有在Objective-C中声明public或private方法 只要您在头/接口中公开一个方法,它就可以从类外部自动公开访问。如果您只添加一个实现,但不在头/接口中公开它(或只在中公开它)

当我将实例变量声明为

@interface FOO : NSObject
{
 @public
  int a;
}
@public
-(id)init;
-(void)dealloc;
@end

错误:“public”之前的预期标识符或“(”

您没有在接口定义之外使用
@public
或其他访问关键字,因为您没有在Objective-C中声明public或private方法

只要您在头/接口中公开一个方法,它就可以从类外部自动公开访问。如果您只添加一个实现,但不在头/接口中公开它(或只在中公开它),它是私有的

@interface FOO : NSObject
{
@public
    int a;
}

- (id)init;
- (void)dealloc;

@end

现在,为什么要将public
int声明为
实例变量(而不是使用属性)或者显式声明
NSObject
已经拥有的两个方法是我无法理解的。

在接口定义之外不使用
@public
或其他访问关键字,因为在Objective-C中不声明public或private方法

只要您在头/接口中公开一个方法,它就可以从类外部自动公开访问。如果您只添加一个实现,但不在头/接口中公开它(或只在中公开它),它是私有的

@interface FOO : NSObject
{
@public
    int a;
}

- (id)init;
- (void)dealloc;

@end

现在,我无法理解为什么要声明一个public
inta
实例变量(而不是使用属性)或显式声明两个
NSObject
已经拥有的方法。

在objective-c methods块中不能包含@public(或@private)block-它仅适用于实例变量,并且objective-c类中的所有方法都是公共的,因此要修复错误,请在代码中删除第二个@public:

@interface FOO : NSObject
{
 @public
  int a;
}
-(id)init;
-(void)dealloc;
@end

在objective-c方法中,块不能包含@public(或@private)块-它仅适用于实例变量,并且objective-c类中的所有方法都是公共的,因此要修复错误,请在代码中删除第二个@public:

@interface FOO : NSObject
{
 @public
  int a;
}
-(id)init;
-(void)dealloc;
@end

为什么要声明公共ivar?为什么要声明公共ivar?