2012-04-24 69 views
1

第一篇文章。對不起,如果我搞砸了代碼規則。我試圖從Big Nerd Ranch Guide中學習Objective C。我將發佈處理強引用的示例。新目標C:需要幫助理解強參考與分配

#import <Foundation/Foundation.h> 

@interface Asset : NSObject 
{ 
    NSSTRING *label; 
    unsigned int resaleValue; 
} 
@property (strong) NSString *label; 
@property unsigned int resaleValue; 
@end 

所以基本上NSString需要強引用,而int不需要。我知道NSString是一個對象,我讀過如果沒有指定任何變量賦予assign屬性。

所以,如果assign足夠好以保持像int這樣的東西被釋放,直到擁有它的對象被釋放爲止,那麼如何將NSString對象保留在Asset對象中以免被釋放?最後,我想我還是無所適從分配確實在引用計數與沒有(也許我應該說保留,因爲這是在ARC強代替)什麼強的條款。

回答

1

強==爲std :: shared_ptr的,如果你來自C++

強大的國家,對象必須保留和分配期間分別發佈。

-(void)assign:(id) b to:(id) a { 
    if(b){ 
     [b retain]; 
    } 
    if (a){ 
     [a release]; 
    } 
    a = b; 

} 

爲了回答第二個問題,一個目的-C的對象的大小沒有被定義如下的結構。因此,obj-C類不能被值保存。

因此編譯爲OBJ-C將始終有,因爲它們的大小存儲在其內普通的舊數據類型的OBJ-C類的內部的所有數據可以作爲固定的來確定。

考慮一個8字節的緩衝區;

前4個字節是您的int第二4個字節的指針,因爲具有可變長度的字符串會在運行時更改您怎麼看這個是行不通的物體的大小,一個字符串分配上堆並分配給你的指針。

+0

謝謝,實際上我在學校學習C++,現在所以這一切仍然是新和模糊給我,但我慢慢了解更多。 – Jordy 2012-04-26 03:30:08