2010-03-12 21 views
4

我想打印所有類型的值,如char,long ...等等,還有nsdate,nsdictionary,frame ....我現在想打印每個類型變量的值。如何在Objective-C中打印不同類型的數據類型?

+0

打印它們正是你在做C.以同樣的方式對於Objective-C類型,可以使用NSLog來打印它們並用%@或調用描述和UTF8String來表示它們,並使用%s使用printf和hte打印,或者使用其他方式打印字符串。因此,給定一些NSDate someDate,使用printf打印:printf(「Some date:%s \ n」,[[someDate description] UTF8String]); – 2010-03-12 05:42:03

回答

10

基本類型,如整數,浮點,雙,等可以在它們被打印在C相同的方式進行打印,使用printffprintf,等等。如果需要打印你可以經常使用NSObject類的數據的方法(NSString *)description以獲得表示對象的數據的NSString。下面是一個例子...

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    NSString *string = [NSString stringWithFormat:@"Hello World!"]; 
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0]; 
    NSArray *array = [NSArray arrayWithObject:@"Hello There!"]; 

    char *c_string = "Familiar ol' c string!"; 
    int number = 3; 

    printf("C String: %s\n",c_string); 
    printf("Int number: %u\n", number); 
    //In 10.5+ do not use [NSString cString] as it has been deprecated 
    printf("NSString: %s\n", [string UTF8String]); 
    printf("NSDate: %s\n", [date.description UTF8String]); 
    printf("NSArray: %s\n", [array.description UTF8String]); 

    //If you are using this information for debugging, it's often useful to pass the object to NSLOG() 

    NSLog(@"NSArray *array = \n%@", array); 

    [pool drain]; 
    return 0; 
} 

編輯:我認爲這將有助於看到輸出當例子跑了......

C String: Familiar ol' c string! 
Int number: 3 
NSString: Hello World! 
NSDate: 2010-03-12 01:52:31 -0600 
NSArray: (
    "Hello There!" 
) 
2010-03-12 01:52:31.385 printfTest[2828:a0f] NSArray *array = 
(
    "Hello There!" 
) 
+0

你可以初始化常量NSString,就像NSString * string = @「Some string」一樣。 stringWithFormat:是一種昂貴的初始化方式,因爲它必須解析格式字符串,更不用說不必要的方法調用了。此外,數字是有符號整數,%u是無符號整數。 – 2010-03-12 07:53:10

+0

作爲Objective C的新手......在分別打印整數和字符串之前,您所說的「%u」和「%s」分別是什麼意思?我注意到它們不是沒有印刷的,但它代表什麼呢? – arik 2010-11-07 12:30:13

+0

arik-so:%u和%s被稱爲轉義序列。它們在技術上不是Objective-C的一部分,而是printf函數。 http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1048379655&id=1043284385 – 2010-11-20 04:47:42