亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Objective-C語法簡記

2019-11-14 19:53:07
字體:
來源:轉載
供稿:網友

  開始學習iphone開發了,雖然現在已經有了Swift,但我還是老老實實地學習Objective-C,鄙人入門的程序語言是C,后來學習了C#和java,現在來學Objective-C,這篇只是一些很簡略的筆記,不算是語法書。

代碼文件

Objective-C的代碼文件有3種,“*.h”的頭文件;”*.m”是普通的源代碼文件,里面可包含Objective-C和C的代碼;“*.mm”也是源文件的一種,里面可包含Objective-C,C和C++的代碼。

最簡單的HelloWorld

1 #import <UIKit/UIKit.h>2 #import "HGAppDelegate.h"3 4 int main(int argc, char *argv[])5 {6     PRintf("Hello world/n");7     NSLog(@"Hello world");8 }

取代了以前熟悉的#include預處理命令,換成了#import,但尖括號“<”,“>”還有雙引號的意義與以前一樣,printf語句依然能輸入那句經典的Hello world,在Objective-C中就有了一種新的方式——NSLog(@"Hello world");大凡以NS前綴開頭的類都是系統預先定義好的類,比如字符串NSString,后來的NSArray等。NSLOG傳入了參數也是“Hello world”,但前面多加了一個@,這個是Objective-C字符串的寫法,如果要聲明一個字符串的變量并附初值@”Hello world”,則是

NSString *str=@”Hello world”;

基本數據類型

  Objective-C的基本數據類型和C中的一樣的,int是整形,char是字符,float是單精度浮點數,double是雙精度浮點數,與C有點區別的在于short和long,這兩種在Objective-C寫法是short int和long int,在這里多了一個長雙精度的類型long double。無符號的在前面多加了一個unsigned,寫法如unsigned int。

特有數據類型

  • Id 是指針類型,它的作用與C#/Java的Object類型很類似,可以指向任何引用類型的引用。
  • BOOL 這類型只有兩個值YES和NO,就代表著1和0。在C中這兩個值也代表true和false。
  • SEL 指向函數的指針,定義并附上初值的形式如下
SEL sel=@selector(方法簽名)

SEL sel=NSSelectorFromString(方法名的字符串)

調用的時候則是以下形式

[obj performSelector:sel withObject: nil];

上面obj是對象的實例,sel則是SEL類型的變量,nil則是obj對象的默認值,如果保險起見,調用前要先判斷obj對象有沒有那個方法,則調用下面的方法,它會返回布爾值,ture就是存在,反之則不存在。

[obj respondsToSelector:sel]:

如果要獲取SEL變量所指向的方法的方法名時,可以調用下面的方法,它返回的是一個字符串。

NSStringFromSelector(sel變量):
  • nil,NiL和NSNull nil與C的NULL一樣,是指向空的指針,它算是一個對象,一個什么都沒有的對象;Nil則是代表空的類,是一個Class來的;NSNull出現在集合中,它代表著集合中空的元素。

流程控制語句

  這里講兩種語句switch和foreach,因為這個在C#和Java之間都會有所區別。

  • Switch,switch語句與C中里面的switch一樣,每個case之后可以不需要用break;結束并跳出switch語句,它會順序執行下一個case里面的代碼,直到遇到了break或者到達語句末尾為止。這里的case后面與Java一樣不能跟字符串。
  • Foreach foreach語句與C#的形式很相像,也是foreach(元素類型 item in 集合的變量名)。在循壞體里面與C#不一樣的是它能夠去對被遍歷的集合進行修改,但是由于更改后枚舉器不會做相應的更新,所以如果刪除了某些元素剛好被遍歷到,有可能會出現空引用的異常。

  Objective-C類的定義分聲明與實現兩個操作,感覺和接口的定義與實現很像。

  • 類聲明
@interface ClassName : NSObject{    //字段定義}    //方法,屬性等其他成員的聲明@end 
  • 類的實現
@implementation ClassName    //方法,屬性等其他成員的實現@end 

方法

方法的聲明語法如下

+(void)methodName(paraType1)paraName1 and:(paraType2)paraName2; 

+代表的是靜態方法,-代表的是實例的方法;后面的括號代表的是返回類型,這里例如上面的方法是空返回void;方法名總在參數的前面,Objective-C的方法名很特殊,按上面聲明的方法,它的方法名師methodName and;參數則是以 :(ParaType)ParaName的形式,如果沒有參數,則方法名后面直接以分號“;”結束。調用則通過以下的形式,objIns則是對象的實例名。

[objIns methodName:value1 and:value2]; 

存取方法

對于私有字段而已要對其獲取或設置都要通過get/set方法來進行,在Java中通過聲明getter/setter方法來實現面向對象編程中的封裝性,在Objective-C中也有這類getter/setter方法,稱之為存取方法。

例如現在有字段int count,他對應的存取方法是

-(void) setCount: (int)couValue;-(int) count; 

Setter方法則是以set+對應的字段名,setter直接與字段同名。在調用的時候可以用通常方括號的形式”[” ”]”當不普通方法來調用,可以使用類似C#,Java中點”.”的方式調用,如果點的方式調用,則直接跟上字段的名字則可,如

MyClass.count=12;Int count=myclass.count; 

屬性

如果聲明了一個屬性,則系統會自動為其生成getter/setter方法。這個與C#的屬性挺類似,但是語法形式大不相同。它與類的定義一樣,分別有聲明與實現兩部分

  • 聲明
@property(修飾符) int count;
  • 實現

@synthesize count;

如果在實現的時候要指定這個屬性是對那個字段經行封裝的,可以通過下面的形式,下面則代表了對count字段的封裝,記得指定時有加下劃線”_”

@synthesize count=_count; 

在聲明的時候可以指定修飾符,修飾符可以用多個,每個間用逗號隔開,修飾符及其作用如下所示

  • Readwirte:可供讀寫;
  • Readonly:只讀;
  • Strong:強引用,就是我們在C#和Java中通常使用的引用,就是指該對象在沒有被任何一個字段引用才會被GC;
  • Weak:弱引用,就算該對象有被字段引用著,還有可能會被GC;
  • Copy:賦值的時候只給一個副本,不會給它本身;
  • Assign:在通過setter賦值時不會增加該對象的引用計數器,這針對NSString類型和基礎數據類型;
  • Retain:調用時會釋放前一個引用的對象,但是引用計數器會加1;
  • Nonatomic:表明這個屬性不考慮線程安全問題。

如果不使用系統自動生成的getter或setter方法,可以通過在修飾符的地方指定自己定義的getter方法和setter方法的簽名,如

@property(getter=mygetter,setter=mysetter:) int count;

又叫作代碼塊,聲明的語法如下

ReturnType(^BlockName)=^(paraType1 para1,paraType2 para2){ /*代碼內容*/ };

等號左邊相當于聲明塊的變量,等號右邊相當于塊的字面值,塊的效果類似于Lumbda表達式,調用時就如C/C#中調用方法那樣

BlockName(para1,para2);

協議

語法如下

@protocol ProtocoName//方法聲明@optional //可選實現//方法聲明@required//必須實現//方法聲明@end

這個類似于接口,實現是在類的聲明處以下面的形式

@interface ClassName:NSObject<ProtocoName1,…..>

類別

語法如下

@interface ClassName(CategoryName)    //方法聲明@end    //其他代碼@implementation ClassName(CategoryName)    //方法聲明@end 

用于給已經定義的類擴展方法,ClassName是已經定義的類,要被擴展的類,CategoryName是類別名,類別中的方法如果遇到方法簽名一樣的方法,則會覆蓋原有的方法;類別中的成員只局限于方法,字段那些是不能定義的;若是覆蓋了方法,那么那個覆蓋的作用域是整個程序。

Self與supper

  • Self是類隱藏參數,類似Java與C#的this,調用方法時先向本類搜索方法,沒有的話再向父類搜索。
  • Super則是預編譯指令,類似C#與Java的super,但是不完全一樣,這里的super不代表對父類的引用,只是在調用方法時先從父類搜索,如果沒有則再往父類的父類中搜索,只在調用方法時有C#/Java的效果,本質還是對當前類的引用。

內存管理

在開始時調用

NSAutoreleasePool *pool=[ [NSAutoreleasePool alloc] init]; 

結束的時候

[pool release];

構造對象

[[ClassName alloc] init];

釋放對象

[ClassInsName release]; 

規則:1)自己用alloc或者copy創建的對象,在用完的時候要release;2)對不是自己創建的對象,則不要去release;3)retain對象后,要realease,兩者要對稱,有多少個retain就要有多少個release。

異常與錯誤

Objective-C的異常處理與C#和Java差不多,也是由try catch finally語句塊組成,拋異常用throw。格式如下

@try{  }@catch(NSException *ex){@throw}@finally{   }

和C#的關鍵字一樣的,只是多了個“@”,catch塊中的@thorw只是為了演示用。

在Objective-C中NSError讓人的感覺與NSException類似,都是與錯誤有關,但實際上兩者在用法上大有不同,NSException是異常,記錄異常的信息,異常是在程序出現,會讓程序卡住的。NSError是錯誤,是記錄錯誤的信息,例如調用了某些方法失敗后,會在傳入方法的NSError對象中填寫相關的錯誤信息,有NSError不會讓程序卡死,但出現了NSException不捕捉則會讓程序卡死,NSException可以被拋出和捕捉,NSError沒有拋出和捕捉這個概念。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文在线视频| 日韩亚洲综合在线| 色妞色视频一区二区三区四区| 精品亚洲国产视频| 在线成人中文字幕| 国产精品福利小视频| 亚洲成人在线网| 日韩毛片中文字幕| 精品国产一区二区三区四区在线观看| 欧美激情中文网| 国产欧美精品xxxx另类| 日韩在线播放av| 国产精品久久久久久网站| 欧美自拍大量在线观看| 精品激情国产视频| 日韩精品丝袜在线| 欧美一级成年大片在线观看| 国产91精品不卡视频| 久久久999精品视频| 久久中文字幕一区| 国产热re99久久6国产精品| 久久夜色精品亚洲噜噜国产mv| 欧美午夜久久久| www国产91| 一道本无吗dⅴd在线播放一区| 国产一区二区三区高清在线观看| 久久久久九九九九| 精品国产依人香蕉在线精品| 亚洲视频欧美视频| 亚洲人精选亚洲人成在线| 精品视频在线播放色网色视频| 国产精品99导航| 在线精品国产成人综合| 亚洲成人网av| 亚洲精品videossex少妇| 欧美一区二区视频97| 97精品国产97久久久久久免费| 国产精品人成电影| 911国产网站尤物在线观看| 91亚洲精品久久久久久久久久久久| 97av视频在线| 欧美日韩亚洲高清| 欧美精品18videos性欧| 国产99视频在线观看| 91精品啪aⅴ在线观看国产| 久久国产精品视频| 久久免费视频观看| 亚洲日韩中文字幕在线播放| 成人中文字幕在线观看| 日韩欧美在线中文字幕| 欧美日韩国产综合视频在线观看中文| 成人欧美在线视频| 欧美激情亚洲国产| 综合久久五月天| 国产精品激情av电影在线观看| 亚洲精品一区二区在线| 欧美精品在线观看| 欧美日韩精品在线播放| 日韩精品极品在线观看| 国产欧美一区二区| 国产脚交av在线一区二区| 久久99国产综合精品女同| 亚洲淫片在线视频| 欧美大胆在线视频| 日韩欧美在线国产| 日韩精品视频免费在线观看| 亚洲全黄一级网站| 久久99久久亚洲国产| 精品国产91久久久久久老师| 国产一区视频在线| 神马久久久久久| 日韩中文字幕在线播放| 亚洲女人被黑人巨大进入| 热久久99这里有精品| 欧美亚洲午夜视频在线观看| 国产精品成人一区二区三区吃奶| 精品日本美女福利在线观看| 亚洲毛片在线看| 2018国产精品视频| 国产欧美日韩高清| 狠狠爱在线视频一区| 国产亚洲日本欧美韩国| 亚洲成人精品视频在线观看| 亚洲第一网站男人都懂| 九色91av视频| 激情久久av一区av二区av三区| 欧美美女操人视频| 久久视频在线视频| 永久免费毛片在线播放不卡| 欧美成年人视频网站| 欧美日韩国产中文精品字幕自在自线| 国产激情999| 九九精品在线视频| 国产精品99久久久久久www| 日韩毛片中文字幕| 91精品在线一区| 亚洲国产精品女人久久久| 亚洲大尺度美女在线| 欧美激情精品久久久久久大尺度| 亚洲人精品午夜在线观看| 精品中文字幕视频| 欧美亚洲国产另类| 日韩毛片中文字幕| 日本成人黄色片| 欧美成人国产va精品日本一级| 68精品国产免费久久久久久婷婷| 国产成人精品久久二区二区91| 日韩视频第一页| 国产精品无av码在线观看| 亚洲最大福利网| 国语自产精品视频在线看抢先版图片| 欧美又大又硬又粗bbbbb| 日韩av在线看| 久久伊人免费视频| 国产精品三级在线| 亚洲美女视频网站| 国产精品久久久久久久久久久不卡| 国产成人精品久久| 亚洲国产精品一区二区三区| 中日韩美女免费视频网址在线观看| 91精品视频免费| 国产精品一区二区三区免费视频| 色婷婷综合久久久久中文字幕1| 97视频在线看| 欧美亚洲国产日韩2020| 国产成人在线亚洲欧美| 日韩中文在线中文网三级| 国产精品免费一区二区三区都可以| 久久精品久久久久电影| 国产精品免费在线免费| 欧美视频国产精品| 久久99亚洲热视| 国产精品69精品一区二区三区| 国产精品久久久久久av下载红粉| 成人性生交大片免费观看嘿嘿视频| 成人乱人伦精品视频在线观看| 亚洲97在线观看| 日韩亚洲欧美中文在线| 精品二区三区线观看| 日韩电影网在线| 欧美整片在线观看| 国模精品视频一区二区三区| 日韩av电影中文字幕| 国产精品99久久99久久久二8| 在线观看精品国产视频| 国产亚洲精品久久久久久牛牛| 91久久精品美女| 国产999精品视频| 97视频免费观看| 欧美激情日韩图片| 欧美性猛交xxxxx水多| 26uuu另类亚洲欧美日本老年| 精品少妇一区二区30p| 日本一区二区不卡| 在线视频欧美日韩精品| 69av在线视频| 国产精品久久精品| 国产精品久久久久久久久免费看| 最新国产精品亚洲| 久久久久久久久爱| 91精品国产91久久久久久久久| 97在线视频免费观看| 丝袜情趣国产精品| 久久成人精品电影|