使用之间有什么区别
@class
& #import
?我有一个情况
我在哪里得到一个构建错误,
解决方案是使用@class
而不是#import
来导入我的
类。
非原子意味着什么?我什么时候 使用非原子来定义属性, 我什么时候避开它?
答案 0 :(得分:2)
@class
允许您为稍后定义的类创建存根。例如:
<强> 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;
答案 1 :(得分:0)
Scott G已经按字面意思回答了你的问题,但是,正如Adam Ko所说,你的意思是#import,答案是@class不会导入类,而只是告诉编译器以后的某个类将提供给定的名称(在我记忆中称为“延迟绑定”)。
@class主要用于两个类相互引用时,因此它们不能互相导入(这可能是编译器错误的来源)。
但是,@ class有一个明确的限制,即编译器不允许您引用已定义类的任何方法或属性。但通常你只需要在实现.m文件中使用它们,在那里你可以毫无问题地导入类。
答案 2 :(得分:0)
原子属性是指即使在另一个线程上同时调用相关的setter,也保证getter返回有效的有意义值的属性。处理术语的成本高于非原子属性,但对于多线程代码更安全。
答案 3 :(得分:0)
如果您使用 atomic (这是默认设置),它会使您的代码完全符合线程安全。
这种魔法花费了一些东西,这就是为什么你经常看到关键字非原子的原因,如果他们真的不关心线程安全性来使他们的代码更快,人们会使用它。