我想將一個自定義對象分配給一個實例變量。爲什麼在使用setter將自定義對象分配給實例變量時使用autorelease?
下面是代碼:
- MyController.h/.M
#import "CustomData.h"
@interface MyViewController : NSViewController
@property (retain) CustomData* theData;
- (void)aRandomMethod;
@end
@implementation MyViewController
@synthetize theData;
- (void)aRandomMethod {
NSData* rawData = [someOtherObject someOtherMethod];
// option 1
self.theData = [[CustomData alloc] initWithData:rawData];
// option 2
CustomData* _theData = [[Custom alloc] initWithData:rawData];
// option 3
self.theData = [[[CustomData alloc] initWithData:rawData] autorelease];
// option 4
theData = [[CustomData alloc] initWithData:rawData];
// ... later code calls some methods on theData or _theData, not useful here.
}
@end
當運行在Xcode的分析功能,它告訴我,有一個「後未引用泄漏的對象......」對於選項1和2,但不適用於3和4.在使用setter時,似乎需要autorelease
自定義對象。我知道autorelease
需要在返回方法中我們擁有的對象時使用。
你能解釋每個選項爲什麼是錯的或正確的?謝謝。
您錯過了在每個選項行打開大括號。 –