1. 程式人生 > >Objective-c 資料型別

Objective-c 資料型別

這裡列出Objective-c中獨有資料型別:


一、字串

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

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

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

  1. typedefstruct objc_object {  
  2. Class isa;  
  3. }*id;  

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

例如:

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

三、BOOL

     在objc.h中,BOOL定義為:

  1. typedefsignedcharBOOL;  
  2. #define YES   (BOOL)1
  3. #define NO    (BOOL)0

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

     如:

  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)的一個型別。
    選擇器就是指向方法的一個指標。我們可以理解為程式執行到這裡時就會執行指定的方法。

    例如:

  1. SEL [email protected] (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. SEL [email protected] (print:);  
  7. SEL [email protected] (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]]) {…}
   如果不想包含子類,就可以使用:

   if( [theObject isMemberOfClass:[Member class]] {…}

六、nil和Nil

nil與C語言的NULL相同。在objc/objc.h中定義如下:
   #define nil 0      /* id of Nil instance */

   Nil與nil有點不一樣,Nil定義一個指向空的類(是Class,而不是物件)。具體定義如下:
   #define Nil 0      /* id of Nil class */

   如:

  1. ClassA *classA = [[ClassA alloc]init];  
  2. classA = nil  
  3. id data;  
  4. data=nil;  

相關推薦

Objective-c 資料型別

這裡列出Objective-c中獨有資料型別: 一、字串     在Objective-c中,字串常量是由@和一對從引號括起的字串序列。比如:@"China"、@"objective-c"等都是合法的字串常量。 二、id型別    id型別是Objective-c中一個

Objective-C資料型別

一、  資料型別Obj-C是C語言的超集,之前我們都知道了,所以Obj-C中的資料型別分為兩種:一種是基於C語言的基本資料型別;另一種是Obj-C特殊的資料型別。1.  C語言基本資料型別Obj-C基於C語言的基本資料型別有:int,float,double和char,那麼

Objective-C資料型別和表示式

4.1資料型別和常量 Objective-C提供了4中基本的資料型別:int 、float、double、char 。 Objective-C中,任何數字,單個字元或者字串通常成為常量。 在程式碼清單4-1中使用了基本的Objective-C資料型別#import <

C# 資料型別轉換 顯式轉型、隱式轉型、強制轉型

C# 的型別轉換有 顯式轉型 和 隱式轉型 兩種方式。 顯式轉型:有可能引發異常、精確度丟失及其他問題的轉換方式。需要使用手段進行轉換操作。 隱式轉型:不會改變原有資料精確度、引發異常,不會發生任何問題的轉換方式。由系統自動轉換。  不同型別的資料進行操作(加減乘除賦值等等),是需要

.NET基礎之C#資料型別

(一)列舉變數 [public] enum 列舉名 { 值1, 值2, 值3, ...... } 例: public enum Gender { 男, 女 } //使用列舉變數 Gender sex = Gender.男; public:訪問修飾符 enum:宣告

C++資料型別

TCHAR 因為C++支援兩種字串,即常規的ANSI編碼(使用"“包裹)和Unicode編碼(使用L”“包裹),這樣對應的就有了兩套字串處理函式,比如:strlen和wcslen,分別用於處理兩種字串。 微軟將這兩套字符集及其操作進行了統一,通過條件編譯(通過_UNICODE和UNICO

C#資料型別轉換之string到int型陣列

已知: string str = "1,2,3,4,5" 問: 如何根據上述字串產生一個int[]陣列?(int[] intLst = {1,2,3,4,5}) 答: 首先:string strLst = str.Split( ',' )  然後:int[] int

C# 資料型別轉換 顯式轉型、隱式轉型、強制轉型

C# 的型別轉換有 顯式轉型 和 隱式轉型 兩種方式。 顯式轉型:有可能引發異常、精確度丟失及其他問題的轉換方式。需要使用手段進行轉換操作。 隱式轉型:不會改變原有資料精確度、引發異常,不會發生任何問題的轉換方式。由系統自動轉換。  不同型別的資料進行操作(加減乘除賦值等等),是需要進行 型別轉換 後,才能繼

OO_W2:C#資料型別C語言有什麼不同?

OO_W2_Question:(9月15日—9月21日)     C#資料型別和C語言有什麼不同?OO_W2_Answer:    討論中……ps: 請大家注意,9月21日後的回覆將不作計分。

C#與C++資料型別比較及結構體轉換

//c++:HANDLE(void *) —- c#:System.IntPtr //c++:Byte(unsigned char) —- c#:Sy

QT與C++資料型別轉換

Qt的資料型別與標準c++是不一樣的,在開發的時候,必然會涉及到很多資料型別的轉換。早已厭倦了百度QString轉QByteArray,QByteArray轉char*,QString轉string…。Qt的第一篇文章,就先來總結一下我用過的資料之間的轉換。 1、QString轉QByt

c#資料型別/變數/常量/計算機資料儲存(進位制之間的相互轉化)

一c#資料型別 注:值型別:值直接儲存在堆疊中(儲存空間小,呼叫速度快); 引用型別:值儲存在堆中(儲存空間大,呼叫速度慢) 1.值型別 a. 值型別變數可以直接分配給一個值.它們是從類System.ValueType中派生的. b.值型別直接儲存其值. c.值型別的例項通常是線上程棧上

跨平臺C/C++資料型別定義

1       需考慮問題1.1    編譯器執行作業系統 l        WINDOWS :  _WIN32、WIN32; l        UNIX/LINUX:  unix、__unix、__unix__;  l        SunOS/SOLARIS: _

C 資料型別

C 資料型別 在 C 語言中,資料型別指的是用於宣告不同型別的變數或函式的一個廣泛的系統。變數的型別決定了變數儲存佔用的空間,以及如何解釋儲存的位模式。 C 中的型別可分為以下幾種: 序號 型別與描述 1 基

c++:資料型別和運算子(與c語言的不同)

c++的標頭檔案與c語言的不同:c++增加的資料型別:結構體的區別:強制型別轉換:c語言需要括號+轉換型別來轉換;c++不需要括號,直接型別(引數),類似於函式的引數傳遞;動態分配記憶體空間:p3=ne

C++與C#資料型別對應關係總結

API與C#的資料型別對應關係表 API資料型別 型別描述 C#型別 API資料型別 型別描述 C#型別 WORD 16位無符號整數 ushort CHAR 字元 char LONG 32位無符號整數 int DWORDLONG 64位

C++ 資料型別;變數型別及其作用域。 ---day1

此篇部落格來自http://www.runoob.com/cplusplus/cpp-variable-scope.html 感謝!!! C++ 資料型別 使用程式語言進行程式設計時,需要用到各種變數來儲存各種資訊。變數保留的是它所儲存的值的記憶體位置。這意味著,當您建立一個變

c# - 資料型別之值型別,引用型別

c#資料型別分為值型別(Value types),引用型別(Reference types),以及指標型別(Pointer types),而指標型別只在不安全的程式碼中使用,本文不討論指標型別。 值型別的引用的本質是拷貝(copy),是創造一個新的記憶體單元來儲存,新記憶體單元

dev c++ 資料型別的範圍

環境: Dev-C++ 4.9.6.0 (gcc/mingw32), 使用-Wall編譯選項 基本型別包括位元組型(char)、整型(int)和浮點型(float/double)。定義基本型別變數時,可以使用符號屬性signed、unsigned(對於char、int),和長度屬性short、long(對

C資料型別的長度

本人最近看到了一種資料型別叫long long,很好奇它的長度和其他型別的區別,方便日後查閱,這裡整理一下C的資料型別: Type Bytes in Win32(64) Valu