2010-11-13 52 views
0
  1. 有什么用 @class & #import之间的区别?我有一个情况 我得到一个生成错误, 和解决方案是使用@class 而不是#import导入我的 类。目标C - 2个简单的问题

  2. 非原子是什么意思?我何时 使用非原子来定义属性, 什么时候我可以避免它?

+0

我认为这是最好的做法,有单独的问题。至于第二个问题,请参阅:http://stackoverflow.com/questions/588866/objective-c-properties-atomic-vs-nonatomic – Chase 2010-11-13 23:38:20

+2

我相信它是#import你说,而不是#define? – koo 2010-11-13 23:39:21

回答

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; 
0

斯科特·G有已经回答了你的问题,从字面上看,但如果正如亚当柯说,你意味着#进口,答案是@class不会导入类,而只是告诉编译器,稍后有一个具有给定名称的类将被提供(在我所记得的所谓的“延迟绑定”中)。

@class主要用于当您有两个相互引用的类时,所以它们不能同时导入(这可能是编译器错误的来源)。

但是,@class有一个明确的限制,即编译器不允许您引用定义类的任何方法或属性。但是通常你只需要在一个实现的.m文件中使用它们,那么你可以在没有任何问题的情况下导入这个类。

0

原子属性是一个getter被保证返回一个有效的,有意义的值,即使在另一个线程上同时调用相关的setter。在处理方面比非原子性质成本更高,但对多线程代码更安全。

0

如果你使用原子(这是默认值),它会产生一些神奇的效果,使你的代码完全线程安全。

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