我讀過蘋果文檔來斷言我正在正確地進行內存管理,但提出了一些問題。iOS objective-c返回對象可用性/範圍
問題1:
他們表現出此代碼段爲錯:
in obj implementation:
- (NSString *)method1 {
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];
return string;
}
... later ...
NString* myString = [obj method1];
NSLog("%@", myString);
[myString release];
You own the string returned by alloc, but lose the reference to it before you get a chance to relinquish ownership. Following the memory management rules, this would result in a memory leak, since the caller has no indication that they own the returned object.
因爲我正在釋放先前已分配對象的護理,沒有內存泄漏,對吧? 「失去對它的引用」是什麼意思?
關於蘋果的內存管理建議(調用者沒有跡象表明他們擁有返回的對象)這是錯誤的,或者這在技術上也是錯誤的?
問題2:
這是一個關於自動釋放對象的可用性:
示例代碼:
in obj1 implementation:
- (NSString *)methodA {
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];
return [string autorelease];
}
in obj2 implementation:
- (NSString *)methodB:(NSString *)inputString {
NSLog("%@",inputString)
//*other call of methods with arg inputString*//
}
... later ...
NString* myString = [obj1 methodA];
[obj2 method2:myString];
多遠(或深)以下我的函數的調用將自動釋放對象由OBJ1返回會能得到的。關於蘋果的文檔「Autorelease對象將在其變量範圍內可用」。我應該在某個時候保留它嗎?
本文可能會幫助任何正在尋找關於此問題的更多解釋的人。 http://www.asgteach.com/blog/?p=73 – 2013-03-12 18:30:31