Objective-C學習筆記(1)

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   java   

oc(objective-c簡稱)

建立在C語言的基礎上,增加了一層最小的範圍的物件導向的文法(保留了物件導向最精華的部分,oc的內容沒有java多,而java的內容沒有c++多,c++的內容最為繁雜)

OC完全相容C語言,c和oc可以混編。可以在OC代碼中混入C語言代碼(前提是oc源副檔名是.m),甚至是C++代碼(不是所有的源檔案都能包含c++代碼,只有源副檔名是.mm的源檔案可以包含c++代碼)。可以使用OC開發Mac OS X平台和iOS平台的應用程式

 

關鍵字

基本上所有關鍵字都是以@開頭,一些常見的關鍵字

@interface、@implementation、@end

@public、@protected、@private、@selector

@try、@catch、@throw、@finally 

@protocol、@optional、@required、@class

@property、@synthesize、@dynamic

self、super、id、_cmd、__block、__strong、__weak

 

字串以@開頭

比如@"Hello"是OC中的字串,而"Hello"則是C語言中的字串

其中,@和字串必須緊挨著。

 

其他文法

 

OC程式的開發過程

 

編輯,編譯,連結(把所有的相互關聯的.o檔案合并在一起,加上函數庫),運行。和c類似,先編寫.m檔案,然後編譯器編譯,連結,運行。

 

OC完全相容C語言

跟C語言一樣,OC(objective-c)程式的入口依然是main函數,只不過寫到一個.m檔案中(檔案名稱可以是中文)。

 1 #include <stdio.h> 2  3 //oc程式的入口函數也是main函數 4  5 int main(void) 6  7 { 8  9     printf("第一個oc程式!oc源檔案完全相容c語言!");10 11     return 0;12 13 }

編譯cc –c main.m,連結cc main.o,運行./a.out

使用NSLog函數輸出內容
1 #import <Foundation/NSObjCRuntime.h>2 //不是#include,而是#import3 int main(void)4 {5     //NSlog輸出內容自動換行6     NSLog(@"第二個oc程式!!");7     return 0;8 }

編譯cc –c main.m

連結cc main.o –framework Foundation

注意:oc程式的連結,只是把c的庫函數自動連結,而oc自己的庫函數,需要連結的時候寫上:–framework Foundation,只要用了foundation架構,就得寫。

運行./a.out

NSLog與printf的區別

NSLog接收OC字串作為參數,printf接收C語言字串作為參數

NSLog輸出後會自動換行,printf輸出後不會自動換行

使用NSLog需要#import <Foundation/Foundation.h>,裡面有NSLog函數的聲明。不需要刻意記憶,想不起來,就編譯,出錯就會提示缺少什麼。

可以只包含架構的主標頭檔,效果等價包含了這個架構裡的所有的標頭檔。標頭檔在Xcode裡面,路徑很深,不好找。

使用printf需要#include <stdio.h>

#import的作用(預先處理)

1、跟#include一樣,用來拷貝某個檔案的內容

2、可以自動防止檔案內容被拷貝多次,也就是標頭檔中不用和C一樣,加入下面的預先處理指令了

#ifndef  xxx xxx

#define xxx xxx

#endif

Foundation架構的作用

開發iOS、Mac程式必備的架構,此架構中包含了很多常用的API(應用編程介面)。架構中包含了很多標頭檔,若想使用整個架構的內容,包含它的主標頭檔即可

#import <Foundation/Foundation.h>

BOOL的使用(完全可以當做整型用)

BOOL類型的本質:typedef signed char BOOL;

BOOL類型的變數只有兩種取值:YES、NO

#define YES (BOOL)1

#define NO  (BOOL)0

BOOL的輸出(當做整數來用);NSLog(@"%d %d", YES, NO);//1 0

C裡沒有布爾類型,c++裡有,oc也有。不過oc的布爾和c++有區別,在C++裡一切非 0 值的東西都為 true,而為0值的為false。但是Object-c裡必須是1為 true ,且並被宏定義為 YES,0 為 false 並被宏定義為 NO。所以下面的代碼,則肯定是得不到想要的運行順序。

 1 #import <Foundation/Foundation.h> 2 BOOL isBool(int, int); 3  4 int main(void) 5 { 6     if (isBool(5, 1) == YES) { 7         NSLog(@"ok"); 8     } 9     return 0;10 }11 BOOL isBool(int x, int y)12 {13     return x - y;14 }

4不是1,在oc裡永遠都不會等於YES(YES就是1),注意:BOOL大寫,YES NO也是大寫,YES就是1,NO就是0

多個.m檔案的開發

跟C語言中多檔案的開發是一樣的,回憶c多檔案開發,常量的定義或者函數的聲明寫在xxx.h檔案,函數的定義寫在xxx.c檔案,主檔案main.c裡寫主程式和函數調用,最後#include xxx.h檔案,一起編譯主檔案main.c和xxx.c檔案即可。

編寫3個oc檔案

main.m

#import "one.h"int main(){    test();    return 0;}

one.h

void test();

one.m

#import <Foundation/Foundation.h>void test(){    NSLog(@"調用了test函數");}

編譯:cc –c main.m test.m  (兩個檔案要一起編譯)

連結:cc main.o test.o –framework Foundation

運行:./a.out

.m檔案和.c檔案混用開發

main.m

#import "one.h"int main(){    test();    return 0;}

one.h

void test();

one.c

#include <stdio.h>void test(){    printf("調用了test函數\n");}

編譯:cc –c main.m one.c

連結:cc main.o test.o (沒有使用Foundation架構的話,就不用-framework Foundation)

運行:./a.out

 

Objective-C學習筆記(1)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.