2012-06-25 60 views
0

如果我在__attribute__((constructor))函數中創建並使用一些Objective-C類,並且它們可能會創建一些自動釋放的對象,那麼可以安全地在構造函數的代碼周圍放置一個@autorelease塊函數即使在main之前調用?__attribute __((constructor))functions and autorelease

+1

也許你應該重新思考這個問題,並以一種不需要這種瘋狂的方式來重構一些東西。 –

+0

爲什麼這很瘋狂?我想創建一個監聽某些通知並自動執行它的事件的單例,以便我的類的用戶只需包含.m文件,而不需要其他任何操作。似乎一個完全合理的方式來實現這一點。我實際上找到了一個已經叫做'BPOCUnitXMLReporter'的例子,它不*包含構造函數中的代碼 - 我猜它沒有使用創建任何自動釋放對象。 – jhabbott

回答

1

據我的理解,main()@autorelease塊沒有比任何其他部分代碼更特殊,所以我不明白爲什麼它不應該工作。

+0

看來你是對的 - 我不確定a)調用構造函數的時間有多早;和b)如果第一個'@ autorelease'塊在'main'之前結束並且另一個'main'開始可以。讀一下這個,再想一想,'main'就是其他功能。構造函數在'main'之前被調用,但所有東西都已經準備好了,所以你可以在'main'的頂部做任何事情。 – jhabbott