Objective-C 入門指南 - NSLog()

NSLog() 為 Objective-C 在命令列印出訊息的函數 (function) ,需要最少一個 NSString 格式化字串 (formatting string) 物件 (object) 當參數 (argument)




所謂格式化字串係指 formatStromg 具有轉換格式字符,轉換格式字符如下表
轉換格式字符說明
%@物件
%%% 字元
%d, %D有正負號 32 位元整數
%u, %U無正負號 32 位元整數
%x無正負號 32 位元整數,用小寫英文字母的十六進位印出
%X無正負號 32 位元整數,用大寫英文字母的十六進位印出
%o, %O無正負號 32 位元整數,用八六進位印出
%f64 位元浮點數
%e64 位元浮點數,用小寫英文字母的科學記號印出
%E64 位元浮點數,用大寫英文字母的科學記號印出
%g64 位元浮點數,同 %e 印出樣式,指數的絕對值小於或等於 4 便直接印出數字
%G64 位元浮點數,同 %E 印出樣式,指數的絕對值小於或等於 4 便直接印出數字
%c8 位元無正負號 ASCII 字元
%C16 位元無正負號 ASCII 字元
%s8 位元無正負號字元
%S16 位元 Unicode 字元
%p指標
%a64 位元浮點數,用 16 進位 (0x) 的科學記號印出
%A64 位元浮點數,用 16 進位 (0x) 的科學記號印出
%F64 位元浮點數


單一格式化字串可以有多個轉換格式字符,格式化字串後所接參數的型態與個數也需要與轉換格式字符相同。舉例如下
#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
 int a = 4;
 int b = 1;
    NSLog(@"狗狗有 %d 隻腳, %d 條尾巴!", a, b);
 
    [pool drain];
    return 0;
}

/* 《程式語言教學誌》的範例程式
 http://pydoing.blogspot.com/
 檔名:formattingdemo.m
 功能:示範 Objective-C 程式 
 作者:張凱慶
 時間:西元 2012 年 7 月 */


此例 NSLog() 中的格式化字串有兩個轉換格式字符 %d ,因此另外加入兩個 int 型態 (type) 的變數 (variable) ab
NSLog(@"狗狗有 %d 隻腳, %d 條尾巴!", a, b);


我們在 demo.m 中是直接以一個 NSString 字串物件當 NSLog() 的參數
// 呼叫 NSLog() 函數,印出 s1 的內容
NSLog(s1);


在新版的 Xcode 中,直接以單一個 NSString 字串物件當 NSLog() 的參數,編譯時可能會出現警告訊息,建議改寫成格式化字串的方式,如下
NSLog(@"%@", s1);


NSLog() 是個功能單純的函數,對了,我們還沒詳細介紹過 Objective-C 的函數咧!先看看看所有可執行程式必定有的 main() 吧!


中英文術語對照
函數function
格式化字串formatting string
物件object
參數argument
型態type
變數variable


您可以繼續參考
基礎篇


相關目錄
Objective-C 入門指南
Objective-C 教材
首頁



參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide

沒有留言: