iOS開發系列—Objective-C之基礎概覽

概覽

前面咱們已經用了幾章內容進行C語言介紹,固然要經過幾篇文章完整的介紹C語言的知識是不太現實的,例如C語言的文件操做、內存申請等咱們都沒有重點介紹,固然核心知識點基本都已經提到了,後面有時間咱們會繼續擴充。今天咱們正式開始學習Objective-C,之後簡稱「ObjC」,ObjC是在C語言的基礎上加上了一層面向對象的特性,它徹底兼容C語言,甚至能夠混寫C++。它是Mac OS X和IOS的主要開發語言,從IOS發佈以後能夠說ObjC的地位呈直線上升趨勢,當前ObjC已是僅次於C語言、Java的第三大編程語言。今天咱們先簡單的看一下C語言的一些基礎內容:編程

  1. 第一個ObjC程序
  2. 基本數據類型

第一個ObjC程序

打開Xcode,建立一個新項目框架

Xcode

選擇命令行程序編程語言

CommandLine

選擇程序語言爲Ojbective-C並輸入項目名稱函數

ProjectName

選擇保存目錄學習

SelectFolder

默認生成一個基本的項目結構ui

Program

程序源代碼spa

//
//  main.m
//  Basics
//
//  Created by Kenshin Cui on 14-2-1.
//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

上面是經過Xcode建立的第一個ObjC程序,這是一個經典的「Hello,World!」。運行結果以下:操作系統

RunResult

下面對上面的代碼作一下簡單解釋:命令行

  1. 首先#import是一個導入命令,相似於C語言的#include命令,可是相對於#include而言,#import有效的處理了重複導入的問題,在C語言中也提到過如何經過條件編譯解決重複導入,而在ObjC中你不須要處理了,#import已經自動進行了重複處理;與#include相似,導入系統類庫使用<>,導入自定義類庫使用」」;
  2. Foundation.h是Foundation框架中的頭文件,這是ObjC中的一個基礎類庫,基本上後面咱們用到的全部ObjC的代碼都須要引入這個類庫;
  3. @autoreleasepool是ObjC的關鍵字,它的做用是對包含在這個關鍵字後面大包括內的程序會自動進行內存回收,不須要開發人員手動釋放無用的對象;固然表面上看起來這有點相似於C#和Java的內存垃圾回收機制,可是事實上他們的原理徹底不一樣,之後再作具體解釋。
  4. NSLog是標準輸出函數,相似於C語言中的printf()函數,可是它會自動換行,固然它一樣支持格式輸出(例如%i表示輸出整形數據,%f輸出浮點型數據),這個函數在Fundation.h中聲明;
  5. @」Hello,World!」,是一個字符串常量,在ObjC中字符串前須要使用@符號;

 

擴展--OjbC語法特色

  • ObjC中沒有命名空間(C#)或包(Java)的概念,那也就是說在同一個應用中不能同時存在兩個徹底相同的類名,一般狀況下咱們經過前綴加以區分,例如在ObjC中的NSString、NSLog中的NS就是前綴。

NS實際上是NeXTSTEP縮寫,是喬布斯離開蘋果後在NeXT公司所開發的系統,這個操做系統在當時雖然沒有得到普遍認同,可是卻爲後面Mac OX奠基了基礎。3d

  • ObjC中不少關鍵字都是以@開頭(例如@autoreleasepool、@interface、@protocol),另外須要注意的是爲了區分C語言中的字符串,ObjC中的字符串也必須加上@。

基本數據類型

在ObjC中的基本數據類型除了C語言中的char、int、float、double以外還有:

  1. BOOL類型,包含兩個值YES和NO,其實ObjC中的布爾類型就是整數1和0;
  2. id類型,是一個對象類型,能夠表示全部對象;
  3. NSString是Fundation框架中定義的字符串類型;
//
//  main.m
//  Basics
//
//  Created by Kenshin Cui on 14-2-1.
//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        char a='a';
        int b=1;
        float c=8.5;
        double d=8.5e+12;
        char e='a';
        BOOL f=YES,g=NO;
        NSLog(@"a=%c,b=%i,c=%f,d=%f,e=%c,f=%i,g=%i",a,b,c,d,e,f,g);
        //結果:a=a,b=1,c=8.500000,d=8500000000000.000000,e=a,f=1,g=0
        
        NSString *str=@"Hello,World!";
        NSLog(@"str=%@",str); //結果:str=Hello,World!
        
        NSLog(@"object=%p",nil);//結果:object=0x0
    }
    return 0;
}

關於上面id類型在這裏不作過多的解釋,後面咱們會專門說到,下面列出經常使用格式符:

格式化輸出

 

注意

1.在C或者ObjC中整形可使用%i也可使用%d來格式化,只有使用scanf()輸入的時候兩者纔有區別(因爲%d始終被編譯器解釋爲decimal intergeer因此即便輸入010會被認爲是整形10,而%i則會將前面的0或者0x認爲此輸入是八進制或十六進制整數);

2.%p本質就是輸出指針地址,在32位編譯器下對於一個指針類型使用%x輸出和%p輸出實際上是同樣的,只是後者會在前面加上「ox」(注意在64位編譯器下因爲指針長度8byte,而整形只有4byte因此%x輸出的內容只是%p的低位數據);

相關文章
相關標籤/搜索