2011-07-28 34 views
1

在Objective-C,當我創建一個新的項目,我得到這個主:NSLog是否意味着作爲一般用途寫入?

NSLog(@"Hello, World!"); 

我無法找到該基金會庫中的任何其他方便的寫作方法。
NSLog目標-c的printf?是否建議在生產中使用它(屏幕上的命令行工具)?
如果不是,我如何使用Foundation庫打印到屏幕?

編輯:
看起來NSLog還增加了時間戳和事情,我想這就是隻在Xcode控制檯。
如何使用像NSLog這樣的格式打印客觀的c對象而沒有時間戳?

回答

2

如果你喜歡,你可以做什麼我平時:定義自己的打印功能的作品一樣好,減去時間戳:

void IFPrint (NSString *format, ...) { 
    if (!format) return; 
    va_list arguments; 
    va_start(arguments, format); 
    fputs([[[[NSString alloc] initWithFormat:format arguments:arguments] autorelease] UTF8String], stdout); // Omit autorelease call if using ARC. 
    va_end(arguments); 
} 

其工作原理是,它使用的NSString文本解析(確切地說,您如何使用%@通過NSLog打印對象),並將其打印出來非常簡單地顯示在屏幕上。它比NSLog更快,並且不通過系統日誌服務。

+0

我想在接下來的最後一行中,你的意思是'fputs([output UTF8String],stout);'。我編輯了片段。 – Guillaume

+0

謝謝,我做到了。進一步編輯爲簡明...;) –

0

您可以使用printf。如果您打印NSStrings和其他Objective-C對象,則NSLog很方便。

+0

如果我想寫NSStrings和其他沒有時間戳的objective-c對象怎麼辦? – Dani

+1

在對象上使用'description'方法獲取調試字符串,然後調用其中一個方法將NSString轉換爲C字符串,如'printf(「%s」,[[obj description] UTF8String])' –

3

目標C是C的超集,所以你仍然可以使用您的printfscanfNSLog打印時間戳和一些過程信息,並在系統控制檯中顯示出來。 NSLog也知道如何打印Obj-C對象(使用格式說明符%@)。

0

NSLog旨在將調試跟蹤寫入控制檯。 Objective-C的是不是真正面向對發展基於控制檯應用程序,所以如果這是你打算什麼,我會要不是看在底層的C庫和使用printfscanf,或像這樣的框架:

Objective-C Command Line Framework

關於如何在沒有NSLog時間戳信息的情況下打印出對象的描述,我將使用printf打印[[myObject description] UTF8String]的輸出,因爲我認爲這是NSLog在使用%@格式說明符打印對象時使用的輸出。

+1

在Obj-C中編寫命令行工具沒有問題。 – Richard

+0

'-description'返回'NSString *',因此在使用'%s'和'printf'之前一定要問它的utf-8表示。 – Richard

+0

@理查德 - 我試圖仔細選擇我的話 - 我沒有說你不能或我不會 - 我說'不齒輪'。隨語言提供的標準庫(不是說c庫)沒有一堆用於處理std-in和std-out的objective-c類。沒關係,我會用底層的C來做到這一點。 – iandotkelly

相關問題