Objective c 目标C-2简单问题
使用Objective c 目标C-2简单问题,objective-c,class,Objective C,Class,使用 @class导入?我遇到了一个情况 在那里我得到了一个构建错误, 解决方法是使用@class 而不是#导入来导入我的 班级 非原子是什么意思?我什么时候去 使用非原子定义属性, 我什么时候才能避免呢 @class允许您为稍后定义的类创建存根。例如: #define MY_INT 5 x = MY_INT; MyOtherClass.h @class MyClass; @interface MyOtherClass : NSObject { MyClass *myObjec
@class
&#导入
?我遇到了一个情况
在那里我得到了一个构建错误,
解决方法是使用@class
而不是#导入
来导入我的
班级
@class
允许您为稍后定义的类创建存根。例如:
#define MY_INT 5
x = MY_INT;
MyOtherClass.h
@class MyClass;
@interface MyOtherClass : NSObject {
MyClass *myObject;
}
MyOtherClass.m
#include "MyOtherClass.h"
@interface MyClass : NSObject {
NSUInteger myInt;
}
#define
用于定义将由预处理器替换的字符串。例如:
#define MY_INT 5
x = MY_INT;
将由预处理器重写为:
x = 5;
Scott G已经逐字回答了您的问题,但如果如Adam Ko所说,您的意思是#导入,那么答案将是@class不会导入该类,而只是告诉编译器稍后将提供一个具有给定名称的类(在我记得的所谓“延迟绑定”中) @class主要在两个类相互引用时使用,因此它们不能相互导入(这可能是编译器错误的根源)
但是,@class有一个明确的限制,即编译器不允许您引用已定义类的任何方法或属性。但是通常您只需要在implementation.m文件中使用它们,在那里您可以毫无问题地导入类 原子属性是保证getter返回有效、有意义的值的属性,即使在另一个线程上同时调用了相关setter。这在处理方面比非原子属性花费更多,但对于多线程代码来说更安全。如果使用原子属性(默认设置),它会使代码完全线程安全
这一魔法需要付出一些代价,这就是为什么你经常会看到关键字非原子的,如果人们真的不关心线程安全,就使用它来加快代码的速度。我认为通常最好的做法是单独提问。至于第二个问题,请看:我认为你说的是“导入”,而不是“定义”?