我正在學習objectiveig和編程一個iPad應用程序。內存管理是我不斷重複並不得不重新閱讀的一件事。我到達那裏......慢慢地。基本規則如每alloc
/retain
你必須有release
是有用的。然而,一個比較基本的東西躲開我,我不知道是否有人能解釋...瞭解ios中的內存管理
看看下面的代碼...
NSArray *myArray = [[NSArray alloc] init];
myArray = [someNSSet allObjects];
這是相對簡單的編碼,並且將需要[myArray release]
聲明。
不過,我一直看到的例子(實際上,我已經廣泛以下「捷徑」用...
NSArray *myArray = (NSArray *)[someNSSet allObjects];
如何,據我瞭解,當你使用你不要的(NSString *)
需要使用[myArray release]
聲明,但我不明白爲什麼。
可能有人可能解釋?
爲什麼我不擁有返回的值。誰/什麼? – 2012-02-26 18:35:29
@BenThompson:當你創建一個對象(new或alloc,copy或mutableCopy)時,它的保留計數爲1,並且你擁有它。 當你發送一個對象一個保留消息時,它的保留計數增加1,你也擁有它。您只需要釋放您擁有的對象。 – 2012-02-26 18:39:28
@Ben:最有可能的是autorelease池是從'allObjects'返回的對象的所有者。另一種可能性是set對象,但這隻會在集合暴露一個已經擁有的對象時纔會發生,而不是創建一個新的數組。但是,除了瞭解背景中發生的事情外,你不應該關心誰擁有事物。無論你做或不做,這都是你需要考慮的。 – 2012-02-26 18:48:55