2010-11-07 17 views
2

http://gcc.gnu.org/onlinedocs/gcc-2.95.3/objc-features_1.html#SEC2罐體C#中之前或之後,主像的目標C

的GNU Objective-C運行提供了一種方法,可以讓你的程序的執行進入主函數之前執行代碼運行代碼。通過特殊的類方法+加載,代碼在每個類和每個類別的基礎上執行。

更新:我在下面看到的答案並不令人滿意。從主程序調用函數沒有什麼特別之處。現在的問題是關於如何在系統中調用一個沒有你的程序的功能,甚至在運行時意識到它的問題。

而是目標C看到這篇文章的Visual C++(感謝StackOverflow的人誰回答我剛纔的問題): http://www.codeguru.com/cpp/misc/misc/threadsprocesses/article.php/c6945

否則沒有必要對目標C運行時包括這個負荷的方法。主要入口點當然存在Objective C程序,如果只需調用靜態方法WITHIN主要方法就沒有什麼大不了:)

+0

其實, *有*無需GNU Objective-C運行時包含加載方法。它不存在於Cocoa的Apple版本中。爲什麼你認爲你需要它? – JeremyP 2010-11-07 11:41:31

+0

比方說,我想爲一類應用程序創建一個容器,我不希望應用程序知道任何像我要設置的系統變量或其他任何東西,只是舉個例子。 – user310291 2010-11-07 12:22:24

+0

加載方法肯定存在於Cocoa中,並始終有(從10.0開始)。 https://developer.apple.com/documentation/objectivec/nsobject/1418815-load?language=objc – dgatwood 2017-08-29 17:24:51

回答

5

在OOP語言中,因爲main總是在類中,所以總有一種方法在main函數執行之前運行一些代碼。在Java中,它被稱爲static initialization block。 C#中也有類似的機制。 See this link

代碼示例:

namespace CSharpConsoleTest 
{ 
    class Program 
    { 
    static Program() 
    { 
     Console.WriteLine("Test123"); 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine("Test111"); 
    } 
    } 
} 

好一點是要能夠因爲它們的實例變量之前創建初始化類中靜態變量。

相關問題