我有一個Objective-C類,它的實例可以檢測到它們不再需要時會自我銷燬,但我正在尋找一種安全的方法從對象本身中觸發對象的自毀,不以某種方式「破壞正在調用銷燬方法」 ...我的代碼看起來大致是這樣的(爲簡潔一些刪除):從自我內部破壞自我
+ (oneway void)destroyInstance:(id)obj {
printf("Destroying.\n");
if (obj != nil) {
free(obj);
obj = nil;
}
}
- (oneway void)release {
_noLongerRequired = [self determineIfNeeded]; // BOOL retVal
if (_noLongerRequired) {
[self deallocateMemory]; // Free ivars etc (NOT oneway)
[MyClass destroyInstance:self]; // Oneway
}
}
如果我把-release
,應該立即返回到主線程(因到oneway
)。
同時,如果實例發現它不再需要,它應該調用oneway
類方法destroyInstance:
並從運行時中刪除它自己。我的問題是,這是安全的嗎?我有沒有正確使用oneway
?在我看來,在它返回之前有可能破壞實例的-release
函數,這可能是...非常糟糕..?
(PS:很明顯不是在找什麼做的NSObject等:)
)
如果你需要這個,你的設計被嚴重破壞。 – 2012-10-14 11:35:05
同意,這聽起來像一個壞主意。讓ARC做這項工作有什麼問題?如果你有額外的清潔,你可以把它放在dealloc中。我沒有看到你的問題的用例。如果你在運行時做了一些瘋狂的事情,而不是使用ARC或GC,使用objc_disposeClassPair,但是從另一個對象來做。 – Jano
@Jano ARC不會處理(我假設?)任何不從NSObject繼承的東西,我試圖讓自己的基類和尋找一個合理的銷燬機制 - 卸載到另一個對象看起來相當不錯! – Ephemera