目标C - 2个简单的问题

时间:2010-11-13 23:35:41

标签: objective-c class

  1. 使用之间有什么区别 @class& #import?我有一个情况 我在哪里得到一个构建错误, 解决方案是使用@class 而不是#import来导入我的 类。

  2. 非原子意味着什么?我什么时候 使用非原子来定义属性, 我什么时候避开它?

4 个答案:

答案 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 (这是默认设置),它会使您的代码完全符合线程安全。

这种魔法花费了一些东西,这就是为什么你经常看到关键字非原子的原因,如果他们真的不关心线程安全性来使他们的代码更快,人们会使用它。