2010-11-13 67 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

如果你使用原子(這是默認值),它會產生一些神奇的效果,使你的代碼完全線程安全。

這個魔法花費了一些東西,這就是爲什麼你經常看到關鍵字非原子,如果人們不真正關心線程安全性以使代碼更快,他們就會使用它。