2010-04-02 38 views
2

我在@interface指針,我正確使用它們嗎? Objective-C的/可可

struct track currentTrack; 
struct track previousTrack; 
int anInt; 

由於這些有這個不是對象,我沒有讓他們如int * ANINT吧? 如果設置像int,布爾等非對象值,我不必發佈舊值(假設非GC環境)?

該結構包含對象:

typedef struct track { 
NSString* theId; 
NSString* title; 
} *track; 

我是不是做正確嗎?

最後,我訪問這樣的結構:

[currentTrack.title ...]; 
currentTrack.theId = @"asdf"; //LINE 1 

我也是手動管理的結構是這樣的內存(從一個setter):

[currentTrack.title autorelease]; 
currentTrack.title = [newTitle retain]; 

如果我正確理解垃圾收集,我應該能夠拋棄它,並將其設置爲像LINE 1(上面)?

還有垃圾回收,我不需要dealloc方法嗎? 如果我使用垃圾收集,這是否意味着它只能在OS 10.5+上運行?在切換到垃圾收集代碼之前,我應該知道的其他任何事情?

對不起,有這麼多的問題。 Objective-C和桌面編程非常新穎。

感謝

回答

4

我有這個在我的@interface

struct track currentTrack; 
struct track previousTrack; 
int anInt; 

因爲這些都不是對象,我沒有讓他們像int* anInt吧?

這將聲明一個指向int存儲在其他地方的指針。

如果設置像int,boolean等非對象值,我不必釋放舊值(假設非GC環境)?

release是一條消息。您只能向Cocoa(或在某些情況下,Core Foundation)對象發送消息。

該結構包含對象:

typedef struct track { 
    NSString* theId; 
    NSString* title; 

更確切地說,它包含指向的對象。

你永遠不能有一個對象直接存儲在一個變量;您只能通過向類發送alloc消息來動態分配它,並接收指向已分配實例的指針。同樣,你只能發送消息給一個指向對象的指針;你不能也不應該將一個指針解引用到一個對象。

由於這些原因,我們幾乎總是摒棄「一個指針」。我們將指針看作是對象,但是,確切地說,它們不是。

} *track; 

,如果你想聲明track類型爲一個指向struct track這是正確的。一般來說,這會混淆人。

最後,我訪問結構是這樣的:

[currentTrack.title ...]; 
currentTrack.theId = @"asdf"; //LINE 1 

所以前行是行0? ;)

我也是手動管理內存(從一個setter)的結構是這樣的:

[currentTrack.title autorelease]; 
currentTrack.title = [newTitle retain]; 

如果我理解正確的垃圾收集,我應該能夠拋棄那隻需要將它設置爲像LINE 1(上圖)?

如果您使用垃圾收集,那麼autoreleaseretain消息將什麼都不做,所以是的,平原的分配和使用(無效)發佈的分配和保留的消息是等價的。

我的確在質疑爲什麼要將這些信息放入結構中,而不是model object

還有垃圾收集,我不需要一個dealloc方法嗎?如果我使用垃圾收集,這是否意味着它只能在OS 10.5+上運行?在切換到垃圾收集代碼之前,我應該知道的其他任何事情?

是:閱讀Garbage Collection Programming Guide。它會告訴你你需要知道的一切,包括前兩個問題的答案。

至於指針,你可能想讀my pointers tutorial。標題說C,但C中的所有內容在Objective-C中也是如此。

0

正確,正確,否,是,正確,是,Apple的垃圾收集編程指南是一個很好的閱讀。

2

雖然你似乎一般都明白這些東西,但我強烈建議不要在存儲結構中存儲對象。爲此獲得適當的內存管理將非常麻煩 - 因爲即使結構本身不需要內存管理,對象仍然會這樣做,除非只能通過函數API訪問結構(實質上使其成爲窮人的對象) ,你將有一個艱難的時間來確保這一切發生。像彼得說的那樣,這是一個模範對象是有意義的。

+0

確實是一般。但是,由於GC在這裏使用,如果有的話,需要以內存管理的名義完成(除了仔細考慮)之外,幾乎沒有什麼需要完成的。 – 2010-04-02 15:03:26

相關問題