Objective-c 數據類型

這里列出Objective-c中獨有數據類型:


一、字符串

? ? 在Objective-c中,字符串常量是由@和一對從引號括起的字符串序列。比如:@"China"、@"objective-c"等都是合法的字符串常量。


二、id類型
? ? id類型是Objective-c中一個比較獨特類型。
? ? 在概念上、類似Java中的Object類,可以轉換為任何數據類型。
? ? 換句話說,id類型的變量可以存放任何數據類型的對象。
? ? 在內部處理上,這種類型被定義為指向對象的指針,實際上是一個指向這種對象的實例變量的指針。

? ? 我們可以理解為id類型就是void*類型。但是它們兩個并非完全一樣。下面是id在objc.h中的定義:

[cpp] view plaincopy
  1. typedef?struct?objc_object?{??
  2. Class?isa;??
  3. }*id;??


? ? 從上面看出,id是指向struct objc_object的一個指針。也就是說,id是一個指向任何一個繼承了Ojbect(或者NSObject)類的對象。需要注意的是id是一個指針,所以在使用id的時候不需要加星號,比如: ? ? ?id n=nil;

例如:

[cpp] view plaincopy
  1. id?data;??
  2. data?=?person;??
  3. [data?print];??
  4. …??
  5. data?=?person1;??
  6. [data?put];??
  7. …??


三、BOOL

? ? ?在objc.h中,BOOL定義為:

[cpp] view plaincopy
  1. typedef?signed?char?BOOL;??
  2. #define?YES???(BOOL)1??
  3. #define?NO????(BOOL)0??


? ???從上面的定義,我們可以發現布爾變量的值是YES和NO,或0和1.

? ? ?如:

[cpp] view plaincopy
  1. BOOL?enable=NO;??
  2. enable=0;??
  3. if(enable?==?YES)?…??
  4. if(enable)?…??
  5. if(!enable)?…??

? ? ? ? ? 它類似于C語言中的TRUE和FALSH.


四、SEL
? ? 在Objective-c中,SEL是選擇器(selector)的一個類型。
? ? 選擇器就是指向方法的一個指針。我們可以理解為程序運行到這里時就會執行指定的方法。

? ? 例如:

[cpp] view plaincopy
  1. SEL?sel=@selector?(print);??
  2. ClassA?*classA?=?[[ClassA?alloc]init];??
  3. ClassB?*classB?=?[[ClassB?alloc]init];??
  4. [classA?performSelector:sel?withObject:nil];??
  5. [classB?performSelector:sel?withObject:nil];??
  6. ??
  7. SEL?selA=@selector?(print:);??
  8. SEL?selB=@selector?(print:age:);??


? ? 在上例中sel是指向print方法的指針,沒有指定它是屬于哪個類。因此,不同的類中都有print方法時可以調用上面的形式進行調用。

? ? 我們可以將SEL理解為函數指針,但它們之間并非完全一樣。



五、Class
? ?與Java類似,你可以使用Class類來獲得一個對象所屬的類。如:
? ?Class theClass = [theObject class]; ? ? ? //獲得theObject對象的class信息
? ?NSLog(@"類名是:%s",[theClass className]); //theObject對象的類名
? ?Class類有幾個常用的方法,如判斷某個對象是否為某個類(包含子類)的對象:
? ?if( [theObject isKindOfClass:[Member class]]) {…}
? ?如果不想包含子類,就可以使用:

? ?nil與C語言的NULL相同。在objc/objc.h中定義如下:
? ?#define nil 0 ? ? ?/* id of Nil instance */
? ?
? ?Nil與nil有點不一樣,Nil定義一個指向空的類(是Class,而不是對象)。具體定義如下:
? ?#define Nil 0 ? ? ?/* id of Nil class */

? ?如:

[cpp] view plaincopy
  1. ClassA?*classA?=?[[ClassA?alloc]init];??
  2. classA?=?nil??
  3. ??
  4. id?data;??
  5. data=nil;??





版權聲明:本文為博主原創文章,未經博主允許不得轉載。

轉載于:https://www.cnblogs.com/Free-Thinker/p/4962958.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374155.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JBoss AS 7 EJB3池配置

現在,AS 7.0.1已經發布,讓我們看一下可用的EJB3新功能。 就像我在上一篇文章中提到的那樣 ,AS 7.0.1現在允許您為無狀態會話bean和MDB配置池。 當前,我們允許在子系統級別配置池,這意味著該池將適用于服務器上部署的所…

iOS開發網絡篇—文件的上傳

說明:文件上傳使用的時POST請求,通常把要上傳的數據保存在請求體中。本文介紹如何不借助第三方框架實現iOS開發中得文件上傳。 由于過程較為復雜,因此本文只貼出部分關鍵代碼。 主控制器的關鍵代碼: YYViewController.m 1 #import…

var模型的matlab實現_Eviews中VAR模型的操作、脈沖響應分析和方差分解的實現

打開文件所在位置,獲取數據。選中變量右鍵open打開var操作EViews,在VAR對象的工具欄中選擇“View”|“Lag Structure”|“AR Roots Table/ AR Roots Graph”選項,得到AR根的表和圖。結果顯示:VAR模型所有根模的倒數都小于1,即都在…

一個程序員的愛情表白書

我能抽象出整個世界 但是我不能抽象出你 因為你在我心中是那么的具體 所以我的世界并不完整 我可以重載甚至覆蓋這個世界里的任何一種方法 但是我卻不能重載對你的思念 也許命中注定了 你在我的世界里永遠的烙上了靜態的屬性 而我不慎調用了愛你這個方法 當我義無返顧的…

結構體、枚舉類型

一、結構體 結構體:就是一個自定義的集合,里面可以放各種類型的元素,用法大體跟集合一樣。 1、定義的方法: struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; …

NXP KW38開發雜記(一)MCUXpress 運行進入NMI_Handler

這里是大佬的具體分析過程,感興趣可以看看 https://www.cnblogs.com/wenhao-Web/p/13618703.html 解決辦法: 在startup_mkw38a4.c文件里,定位到Flash_Config {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE}; 把最后一個參數0xFFFFFFFE改…

25個讓Java程序員更高效的Eclipse插件

Eclipse提供了一個可擴展插件的開發系統。這就使得Eclipse在運行系統之上可以實現各種功能。這些插件也不同于其他的應用(插件的功能是最難用代碼實現的)。擁有合適的Eclipse插件是非常重要的,因為它們能讓Java開發者們無縫的開發基于J2EE和服…

NXP KW38藍牙開發(一)入門第一課:官網藍牙廣播和連接例程,NMI禁止

首先要下載開發使用的IDE:MCUXpresso IDE 下載鏈接: 進入nxp的官網,搜索KW38 向下翻看,找到Xpresso,點擊進入 習慣使用IAR開發的同學也可以下IAR版本,這里以Xpresso為例 下載好后安裝,一路默…

rough and crude

rough:物理上的粗糙或者說不平,高爾夫球場的生草區 crude:原始、未經加工的那種粗,即沒有精加工轉載于:https://www.cnblogs.com/dgyw/p/5767078.html

views 多個文件夾 netcore_.NET Core中的使用Kestrel服務器理解及應用

Kestrel是一個基于libuv的跨平臺.NET Core web服務器,libuv是一個跨平臺的異步I/O庫。ASP.NET Core模板項目使用Kestrel作為默認的web服務器。Kestrel支持以下功能:HTTPS用于啟用不透明升級的WebSockets位于Nginx之后的高性能Unix socketsKestrel 被.NET…

使用PowerMock測試對象的內部狀態

大多數單元測試都集中于測試對象的行為以證明其有效。 這可以通過編寫一個JUnit測試來實現,該測試調用對象的公共方法,然后測試這些調用的返回值是否與先前定義的一組期望值匹配。 這是一種非常常見且成功的技術。 但是,不應忘記對象也顯示狀…

布局

1)ul li 把ul寬度設置大一點,然后overflowhidden;(最好不要嵌套使用,原因看清除浮動方法),然后外面必須有包裹的div殼,div殼的寬度就按設計稿來,這樣就避免了需要給最后一個li設置m…

10個職場故事,讓人不得不看

1、強盜師徒 有一次,一個老強盜帶著徒弟去搶劫銀行,被警方追捕。兩人狂逃,差點兒連褲子都跑掉了。好不容易甩掉了警察,兩人上氣不接下氣,癱倒在地上。 良久,驚魂稍定,徒弟說:“師父啊師父&#…

NXP UWB NCJ29D5開發(一)環境搭建

1、從NXP的共享賬號下載資料 共享賬號需要找對接的NXP人員拿到,他會把資料分享到這個賬號,在這個賬號里面可以下載 進入nxp官網,登錄后點擊my nxp,選擇Software Licensing and Support 進入后接著選擇View accounts 進入后選擇…

西瓜創客python編程進階收費_西瓜創客和編程貓有什么不同?哪個更值得報名?...

看情況來決定即可,在課程內容上其實出入我覺得不是很大,重點是教學服務、師資、授課模式等,單純我自己的角度來說,我個人偏向于西瓜創客多一點,他們家的課程更具有趣味性,游戲化教學,融入卡通人…

Stack的三種含義

作者:阮一峰 學習編程的時候,經常會看到stack這個詞,它的中文名字叫做”棧”。 理解這個概念,對于理解程序的運行至關重要。容易混淆的是,這個詞其實有三種含義,適用于不同的場合,必須加以區分。…

NXP UWB NCJ29D5開發(二)BlinkyLed例程

路徑為UWB\NCJ29D5\NCJ29D5_CAS_Examples_v1.4\onic\BlinkyLed\toolsupport\keil 例程怎么來的可以看看上一篇NXP UWB NCJ29D5開發(一)環境搭建 1、 //系統選擇外部晶振,時鐘頻率為55.2Mhz phscaAppHal_Init(PHSCA_APPHAL_XO_CLOCK_SOURCE_…

你要看透的56條人生哲理

當你躊躇不前、站在人生十字路口時候,這56條哲理或許能助你一臂之力!      1.拿得起,放得下      我們每個人都有很多“寶貝”,但你不可能什么都得到,在某些時候一定要學會拿得起,放得下…

使用Spring和Java泛型簡化數據訪問層

1.概述 本文將著重于通過對系統中的所有實體使用單個通用的數據訪問對象來簡化DAO層 ,這將導致優雅的數據訪問 ,而不會造成不必要的混亂或冗長。 2. Hibernate和JPA DAO 大多數生產代碼庫都有某種DAO層。 通常,實現范圍從沒有抽象基類的多個…

強肝保肝養肝4大食物

“強肝的食物,保肝的食物有哪些,養肝的食物有哪些”如果您對這些食物不了解不明白。那就看看專家為您推薦的四款強肝保肝養肝的食物。荔枝(供圖/華蓋)一、是荔枝,荔枝可以保肝,對肝有好處根據《本草綱目》記載荔枝有強肝健胰的效果…