OC-变量和数据类型
對象的初始化
Fraction *myFract=[[Fraction alloc] init];//初始化對象
[myFract setTo:1 over:3];//設置初始值
初始化對象和設置初始值的過程通常可以合并到一個方法中。
myArray=[[NSArray alloc] initWithArray:myOtherArray];
常見的編程習慣類中的所有初始化方法都以init開頭。
編寫初始化方法的策略:
通過復寫init方法達成目的;必須將父類init方法的執行結果賦值給self(因為初始化過程改變了對象在內存中的位置--意味著引用將要改變);如果有多個初始化方法,應把參數最多的初始化方法作為指定的初始化方法,其他的初始化方法調用指定的初始化方法,這樣可以把大部分初始化代碼集中到單個方法中。
-(Fraction *)initWith:(int)n over:(int)d {self=[super init];if (self) {[self setTo:n over:d];}return self; } 初始化方法示例?為了符合初始化規則,應該重寫Fraction類的init方法,這一點尤其在作為子類時特別重要;所有的初始化方法都應返回id類型,這是編寫可能會被繼承的類初始化方法的一般規則,因為子類的對象并不等同于父類。
作用域
@protected 可被該類及任何子類中定義的方法直接訪問--接口部分定義的實例變量默認是這種作用域
@private 可被定義在該類的方法直接訪問,當時不能被子類中定義的方法直接訪問--實現部分定義的實例變量默認是這種作用域
@pubilc 可被該類中定義的方法訪問,也可被其他類或模塊中定義的方法直接訪問
@package 對于64位映像,可以在實現該類的映像中的任何地方訪問這個實例變量
全局變量
在程序的開始處(所有的方法、類定義和函數定義之外)編寫int gMoveNumber=0,那么gMoveNumber即為全局變量,而且是外部全局變量。
慣例,g作為全局變量的首字母
需要訪問別的文件中定義的全局變量,只需在聲明前加上關鍵字extern。
#import <Foundation/Foundation.h> #import "Foo.h"int gGlobalVar=5; int main(int argc, const char * argv[]) {@autoreleasepool {Foo *myFoo=[[Foo alloc] init];NSLog(@"%i",gGlobalVar);[myFoo setgGlobalVar:100];NSLog(@"%i",gGlobalVar);}return 0; } main方法 -(void) setgGlobalVar:(int) val {extern int gGlobalVar;gGlobalVar=val; } Foo類的setgGlobalVar方法結果:5
10
靜態變量
希望定義的全局變量只在特定的模塊(文件)中是全局的,除了特定類中的方法之外沒有其他方法需要訪問這個特定變量。則該變量需要定義為靜態變量。靜態變量定義如下:static int gGlobalVar=0
枚舉數據類型
enum flag{false,true}; enum direction{up,down,left=10,right}; enum {east,west,south,north} direction; 枚舉定義?數據類型轉換
如果其中一個操作數是long double,另一個操作數被轉換為long double型,計算結果也是這種類型
如果其中一個操作數是double,另一個操作數被轉換為double型,計算結果也是這種類型
如果其中一個操作數是float,另一個操作數被轉換為float型,計算結果也是這種類型
如果其中一個操作數是Bool、char、short int、bit field或者枚舉數據類型,全部轉換為int型
如果其中一個操作數是long long int,另一個操作數被轉換為long long int型,計算結果也是這種類型
如果其中一個操作數是long int,另一個操作數被轉換為long int型,計算結果也是這種類型
到這一步,兩個都是int,計算結果也為int
但是涉及到unsigned操作數時,轉換規則更為復雜
位運算符(暫緩)
?
轉載于:https://www.cnblogs.com/Charles-lv/p/4669575.html
總結
以上是生活随笔為你收集整理的OC-变量和数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】Oracle Outline使用方
- 下一篇: Atomikos 中文说明文档【转】