對於OC,C,C++,C#等多種年齡段的新手來說,現在思維有點令人難以置信。目標C:關於分配,保留和釋放的新手問題
考慮:
// AnInterface.h
@interface AnInterface : NSObject
{
}
@property (retain) SomeObject* m_Object;
// AnInterface.m
#import "AnInterface.h"
@synthesize m_Object;
-init
{
self= [super init];
if(!self)
return (nil);
SomeObject* pObject= [[SomeObject alloc] init];
self.m_Object= pObject;
[pObject release];
}
我敢肯定上面是正確的。然而, 爲什麼不只是做:
self.m_Object= [[SomeObject alloc] init];
請問這項工作呢?它違反了一些內存管理原則嗎?它似乎應該工作,一行而不是三,但我肯定我一定是失去了一些東西....
任何洞察力將不勝感激。
非常接近重複:http://stackoverflow.com/questions/3722998/objective-c-memory-management-question,http://stackoverflow.com/questions/4210700/objective-c-memory -management-question –
不要調用ivars或屬性'm_'任何東西; Objective-C中沒有使用所有那種愚蠢的gobbledegook符號。 – bbum
@Josh - 所以,根據那篇文章,如果我剛剛直接分配了實例(m_Object = ...),而不是使用setter,它會工作得很好,對不對? – GTAE86