一小時學會object-c

來源:互聯網
上載者:User

標籤:des   blog   java   color   使用   os   

■ XCODE設定:(1)把編譯器中的“警告”,設定成錯誤層級。方法:build settings 搜尋error->“treat warings as errors”,更改為true.(2)xcode 快速鍵:ESC: 開啟代碼提示自動完成視窗TABLE:補全自動提示快照:command+ctrl+s儲存:command+s撤銷:command+z運行:command+r注釋 command+/(支援塊)斷點:command+\縮排:command+[ 或 command+] 分析代碼:command+shift+b(找到記憶體溢出問題)跳轉聲明: command  + 單擊   清除控制台: control + k 添加書籤 command+d摺疊 command+control+左箭頭屏開 command+control+右箭頭屏開所有 control+u摺疊方法 command+control+上箭頭展開方法 command+control+下箭頭摺疊註解區塊 command+control+shift+上箭頭展開註解區塊 command+control+shift+下箭頭  關閉:command+w行首:command+左箭頭行尾:command+右箭頭搜尋:command+f(當前開啟文檔)替換:command+option+f(當前開啟文檔)刪除本行:ctrl+k全部儲存:command+alt+s項目全域搜尋與替換:command+shift+f(左側工具列放大鏡,上下箭頭可以更改搜尋/替換狀態)  ■ 安裝到IPHONE(1)infor面板:Bunddler Identifier -> com.lipeng(2)Building Settings面板:ALL->Code singing identify->com.lipeng   ■ IPHONE開發:文字框和lable標籤,是IBOutLet,需要從XIB視窗的AppObject拖到InterfaceBulid的Window視窗按鈕,是IBAction,需要從InterfaceBulid的Window視窗拖到XIB視窗的AppObject  ■ Foundation Kit教程(常用資料類型備忘)(1)結構體: NSRange、NSPoint、NSSize(2)字串相關函數:初始化:NSString *str1; str1=[NSString stringWithFormat:@"hello %d",5];比較是否相等:isEqualToString比較大小:str1 compare: str2 (結果為-1,0,1) 有可選項 options:(是否區分大小寫和只比較字串所含字元個數)字串包含:開頭:hasPrefix,結尾:hasSuffix,(這兩種方式返回BOOL)中間:rangeOfString,(此方式返回NSRange,range.start即為匹配索引指,沒找到則start=NSNotFound)另,NSString-》對應JAVA中的String,NSMutableString-》對應JAVA中的StringBuffer(3)數組:兩個注意事項:1,只能放NSObject對象,而不能放基礎資料型別 (Elementary Data Type)(參考下文——封裝基礎資料型別 (Elementary Data Type))。2,可變數組是NSMutableArray(參考NSMutableString)字串分隔成數組: componentsSeparatedByString數組合并成字串: componentsJoinedByString 可變數組的初始化:NSMutableArray *array;array=[NSMutableArray arrayWithCapacity:10];可變數組的增、刪、查增:[array addObject: whbobjectname]刪:[array removeObjectAtIndex:1] 查:[array objectAtIndex:i]  遍曆數組樣本(優先推薦快速遍曆): 方法一:快速遍曆樣本(僅適用於Object-C2.0,Mac OSX 10.5以上版本,相當於其他語言中的foreach):for(NSString *string in array) //in whbenum也可以{  NSLog(@"I AM %@",string);} 方法二:普通迴圈遍曆NSArray * array;array=[NSArray arrayWithObjects:@"one",@"two",nil];// nil 代表數組的結尾(聯想一下C語言)int i;int arrayCount=[array count];for(i=0;i<arrayCount;i++){  NSLog(@"itme %d ",i,[array objectAtIndex:i]);} 方法三:迭代子NSEnumerator *whbenum;whbenum=[array objectEnumerator];id item;while(item=[whbenum nextObject]){  NSLog(@"item:%@",item);}  (4)字典: 初始化:NSMutableDictionary *tires;tires =[NSMutableDictionary dictionary];//注意:不是new增加字典元素:(key相同即為修改)[tires setObject:whbojbectname forKey:@"whbkeyname"];刪除字典元素:[tires removeOjbectForKey:@"whbkeyname"];尋找字典元素:(擷取)Tire *tire=[tires objectForKey:@"whbkeyname"] (5)封裝基礎資料型別 (Elementary Data Type)(NSArray和NSDictionary不支援基礎資料型別 (Elementary Data Type),必須先封裝):NSNumber *number;裝箱:number=[NSNumber numberWithInt:42];拆箱:[number intValue]; (6)NSValue(指標,是NSNumber的父類,使用方法類似於C語言中的&parm,取變數的記憶體位址,個人感覺不是很常用)(7)NSNull用法:[NSNull null] (8)檔案操作擷取副檔名:[filename pathExtension] 二進位檔案轉換成文字檔:plutil -convert xml1 filename.plist【字串形式操作檔案】:NSString *filecontent;寫入:[filecontent writeToFile:@"tmp/whb.txt" atomically:YES]讀取:filecontent=[[NSString alloc] initWithContentsOfFile: @"tmp/whb.txt"];【數組形式操作檔案】:NSArray *arraycontent;arraycontent =[NSArray arrayWithObjects:@"1",@"2",nil];寫入:[arraycontent writeToFile:@"tmp/whb.txt" atomically:YES]讀取:arraycontent =[NSArray arrayWithContentsOfFile: @"tmp/whb.txt"]; (9)日期和時間NSDate *date=[NSDate date];NSLog(@"today is %@",date); ■ OOP 編程方法:+(void) methordname  +號表示是類的靜態方法。方法:-(id) init  id型資料是指泛型對象指標。if(self=[super init]) 完成了超類初始化和校正記憶體位址為當前新產生對象2個功能(因為super init不一定返回self呦)。產生類的執行個體:[[ClassName alloc] init] 等價於 [ClassName new] 類屬性的命名(不推薦):setPropety,Property(而不是getProperty,NS曆史遺留問題,getMethord的形參,全部是指標類型)類屬性推薦方法如下:.h屬性定義:@property float whbProperty;.m屬性實現:@synthesize whbProperty;實現後,預設有一個setWhbProperty方法來設定屬性值。 重寫父類方法:[super funcname:parm]一段完整代碼執行個體:@implementation Circle-(void) setFillColor:(ShapeColor)c{ if(c==redcolor) {  c=greencolor‘ } [super setFillColor:c]}類執行個體方法內部調用:[self whbmethord] (這裡的self,相當於其他語言的this)  其他注意事項import標頭檔時,<>與“”的區別:前者表示是系統標頭檔,禁止修改,後者是你自己的項目標頭檔,可以修改。@class ClassName;  是放在interface.h中的,只是為了在interface中引用這個ClassName類。@class主要實現循環參考內含項目關聯性。 import ClassName.h; 是放在implement.m中的。 ■ KVC間接訪問對象屬性方式,意即:索引值編碼:setValue:forKey 和 valueForKey:程式碼範例:[car setValue:[NSNumber numberWithFloat:250.4] forKey:@"whbProperty"]編譯器將首先尋找-setWhbPorperty的方法,如果不存在,則尋找類執行個體變數是否有whbProperty。注意:(1)鍵路徑編碼的setValue:ForKeyPath:和valueForKeyPath:支援"."點文法路徑訪問。(2)鍵路徑編碼支援一對多關聯性中的數學運算。(不推薦,效率有待商榷,編譯器不能排錯)比如來匯總車庫中所有汽車的行駛裡數:NSNumber *summiles;summiles=[garage valueForKeyPath:@"[email protected]"];其中與sum類似的函數還有:count,avg,max,min   ■ 類別和協議類別(category):主要實現往一個現有類中增加新方法(只能增加方法,不能增加變數,增加方法時,會覆蓋舊有同名方法)定義執行個體代碼:@interface WhbClass(categoryName)-(void) newMethordName;@end解釋:往WhbClass類中增加一個newMethordName新方法,此類別的名稱為categoryName類別主要功能:分散單個大類檔案,比如分離出categoryName.m 協議:@protocal協議:類似於JAVA中的介面interface,定義與類別類似(@optional和@required)使用協議執行個體代碼:@interface Car:NSObject<WhbProtocal1,WhbProtocal2>(即承諾要實現2個協議中的所有方法) ■ 謂詞篩選過濾(即從集合當中,尋找指定元素,如果是簡單數組,可使用‘SELF CONTAINS‘關鍵字)NSPredicate *predicate;predicate=[NSPredicate predicateWithFormat:@"name==‘whbname‘"];//其他運算子執行個體:car.age>10 && car.age<20 等價於 car.age BETWEEN{10,20}(car 可用 SELF替換)BOOL match=[predicate evaluateWithObject:car];NSLog(@"%s",(match)?"YES":"NO"); NSArray *cars=[garage cars];//設定一個等待搜尋的大集合 方法一://集合篩選-》從集合當中,尋找指定元素//一般的for遍曆方式____beginfor(Car *car in cars){  if([predicate evalueWithObject:car])  {     NSLog(@"%@",car.name);  }}//一般的for遍曆方式____end  //方法二://集合篩選-》從集合當中,尋找指定元素,組成新集合NSArray *resultArray;resultArray=[cars filteredArrayUsingPredicate:predicate];//提示:一個filteredArrayUsingPredicate代替了for迴圈的3條語句NSLog(@"%@",resultArray);如果是想列印所有car對象的某個屬性,則用如下方式:NSArray *names;names=[resultArray valueForKey:@"name"]; 特別說明:方法一,方法二運行效率一致。  ■ 記憶體管理(重要): 自動釋放池(必須自己建立,可以有多個,棧形式):NSAutoreleasePool *pool;pool=[[NSAutoreleasePool alloc] init];......[pool release];特別注意:(1)drain只適合於10.5以上版本(2)drain只是清空池,並不釋放池本身 記憶體管理規則:如果使用new,alloc,copy三個方法其中的任何一個,必須使用release 顯示釋放記憶體,其餘則由系統自動管理即可。另,如果你想一直擁有某個對象,則需要在dealloc中釋放即可。 特別注意:如果在某個類的執行個體方法中,將某個類執行個體屬性用new,alloc,copy三個方法其中的任何一個進行了初始化,那麼必須在該類執行個體的dealloc方法中,顯示釋放該對象,用法樣本如下:-void dealloc{  [whbProperty realease];  [super dealloc];} 其他注意事項:whbProperty=nil;//並不能釋放記憶體,僅僅是將指向實體物件的指標,指向了nil,而實體物件本身直接記憶體泄露 ================以下僅供備忘參考,不經常使用 防止記憶體泄露的方法:-void setEngin:(Engine *)newEngine{  [newEngine retain];  [engine release];  engine=newEngine;} 自動釋放資源(蘋果不建議用,詳見三條規則):NSString *description;[description autorelease]; //並不增加計數器的計數 開啟記憶體回收機制(10.5以上版本適用,注意不支援ipone開發)build選項卡-》Setting-》Object-c carbage Collection-》設定為required[-for-gc-only]  ■ 函數集錦//16進位顏色轉UICOLOR +(UIColor *) colorWithHexString: (NSString *) stringToConvert  {      NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];            // String should be 6 or 8 characters      if ([cString length] < 6) return [UIColor blackColor];            // strip 0X if it appears      if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];      if ([cString hasPrefix:@"#"]) cString = [cString substringFromIndex:1];            if ([cString length] != 6) return [UIColor blackColor];            // Separate into r, g, b substrings      NSRange range;      range.location = 0;      range.length = 2;      NSString *rString = [cString substringWithRange:range];            range.location = 2;      NSString *gString = [cString substringWithRange:range];            range.location = 4;      NSString *bString = [cString substringWithRange:range];            // Scan values      unsigned int r, g, b;      [[NSScanner scannerWithString:rString] scanHexInt:&r];      [[NSScanner scannerWithString:gString] scanHexInt:&g];      [[NSScanner scannerWithString:bString] scanHexInt:&b];            return [UIColor colorWithRed:((float) r / 255.0f)                             green:((float) g / 255.0f)                              blue:((float) b / 255.0f)                             alpha:1.0f];  }   亂七八糟: id shapes[3];//定義一個對象數組,裡面存各種不同的對象,初始化方法參照:shapes[0]=[Circle new];
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.