蘋果開發(fā)重要語法知識_第1頁
蘋果開發(fā)重要語法知識_第2頁
蘋果開發(fā)重要語法知識_第3頁
蘋果開發(fā)重要語法知識_第4頁
蘋果開發(fā)重要語法知識_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、蘋果開發(fā)重要語法知識 2013-01-04 22:03:56| 分類: 默認分類|字號 訂閱感謝這位大大 iphone開發(fā)中,自定義協(xié)議有什么用?iphone開發(fā)中,自定義協(xié)議自定義協(xié)議語法如下:protocol 協(xié)議名稱方法之聲明endobjective-c2.0中協(xié)議的新特性:(1)optional預編譯指令:表示可以選擇實現(xiàn)的方法(2)required預編譯指令:表示必須強制實現(xiàn)的方法。例如:protocol frameworkdelegate optional /可選的(正式協(xié)議) 有這個做標志-(void)didreceivecm:(framework*)framework chat

2、message:(chatmessage*)cm;-(void)quserarrived:(framework*)framework addressbook:(nsmutablearray*)ab;/如果optional 放在此處,表示上面2個方法內部必須實現(xiàn),下面2個方法可選-(void)alluserarrived:(framework*)framework addressbook:(nsmutablearray*)ab;-(void)conversationlistchanged:(framework*)framework conversationlist:(nsmutablearray

3、*)cl;end協(xié)議表示了方法可以被任何類所實現(xiàn)。協(xié)議本身不是類。他們只是簡單定義了一個其他對象可以實現(xiàn)的接口。當你的類實現(xiàn)了協(xié)議中的某個方法的時候也就是說你的類實現(xiàn)了那個協(xié)議。 objective-c的另一個擴展稱為協(xié)議,它非常象java中的接口。兩者都是通過一個簡單的方法聲明列表發(fā)布一個接口,任何類都可以選擇實現(xiàn)。協(xié)議中的方法通過其它類實例發(fā)送的消息來進行調用。iphone程序開發(fā)里,object-c里的delegate怎么理解?答:設置代理然后就可以實現(xiàn)協(xié)議了。相當于c+里實現(xiàn)一個接口,或java里實現(xiàn)一個抽象類里的抽象方法。有些類里不僅可以設置代理,還可以為其設置數(shù)據(jù)源(比如一些模態(tài)窗

4、口uiactionsheet之類的)。有很多時候是需要在b類口中來完成一些對a類的操作, 這時就需要a設個代理讓b來完成了,這個在應用中很常見也很實用。nstimer定時器的基本操作方式nstimer是cocoa中比較常用的定時器類,基本操作如下:handletimer方法可以自行定義。在需要的地方創(chuàng)建timer即可,handletimer就可以每0.5秒執(zhí)行一次。- (void) handletimer: (nstimer *) timer/在這里進行處理nstimer *timer;timer = nstimer scheduledtimerwithtimeinterval: 0.5tar

5、get: selfselector: selector(handletimer:)userinfo: nilrepeats: yes;在cocoa中使用json(重要基礎知識)json是一種新的用于在互聯(lián)網(wǎng)上進行數(shù)據(jù)交換的標準格式。由于它的冗余、可讀性和可解析性都比xml要好,因此json這種數(shù)據(jù)交換格式越來越廣泛地運用于web應用,尤其是ajax應用中。在cocoa中使用json也很簡單,目前有兩個json的框架,都很容易使用,而且都對nsdictionary進行了擴展,您可以選擇其一將json“揉”到您的cocoa應用程序里。一個叫做bsjsonadditions,由blake seely

6、開發(fā)。將nsdictionary對象轉成json字符串只需要進行如下轉換:dict jsonstringvalue; 就可以返回一個nsstring的json格式。反過來如果希望將json字符串轉成nsdictionary,只需要進行如下轉換:nsdictionarydictionarywithjsonstring:jsonstring 就可以返回nsdictionary的對象了。另一個叫做json-framework,參考了bsjsonadditions,并且以framework的方式提供。json-framework的用法同樣類似,使用nsdictionary或者nsarray的jsonr

7、epresentation方法來獲取json的nsstring字符串,用nsstring的jsonvalue方法來獲取轉換后的nsdictionary或者nsarray對象。objective-c 內存管理的幾點總結(非常重要的基礎知識)1.當你使用 new、alloc 或 copy 創(chuàng)建對象時,對象的 count retain 到 1。你一定要負責把這個對象 release 或 autolease 掉。這樣當它的生命周期結束時,它才能清空。2.當你使用其他方法獲得一個對象時,你可以認為它已經(jīng) retain 了一個 count,并且 autolease 掉了。你不用考慮和它相關的清理問題。但是

8、如果你想保留這個對象,那么你需要 retain 它,并且要確保之后你 release 了這個對象。3.如果你 retain 一個對象,你最終總是需要 release 或者 autolease 它。這三條規(guī)則在寫代碼的時候一定要遵守,一旦遵守了一般也就不會有內存泄露的問題。在iphone的平臺下,要進行socket開發(fā)其實有很多種的方法,開源的庫asyncsocket,官方的cfsocket,還有bsd的socket。 視圖里兩個事件的區(qū)別(重要語法知識)viewdidload事件就是只有產生的時候才響應,重新打開的時候是沒響應的。viewwillappear就是每次出現(xiàn)的時候的消息,在load

9、之后。順道寫下image的一些 用法uiimage *iamge=uiimage imagenamed:*.png;cell.imageview.image=image;iphone開發(fā)-nstimer定時器的基本操作方式nstimer是cocoa中比較常用的定時器類,基本操作如下:handletimer方法可以自行定義。在需要的地方創(chuàng)建timer即可,handletimer就可以每0.5秒執(zhí)行一次。 - (void ) handletimer: ( nstimer *) timer / 在這nstimer是cocoa中比較常用的定時器類,基本操作如下:handletimer方法可以自行定義。

10、在需要的地方創(chuàng)建timer即可,handletimer就可以每0.5秒執(zhí)行一次。- (void)handletimer: (nstimer *)timer /在這里進行處理nstimer *timer;timer = nstimer scheduledtimerwithtimeinterval: 0.5target: selfselector: selector(handletimer:)userinfo: nilrepeats: yes;repeates設置成yes的時候會隔0.5s就做一次handletimer,調試的時候就會發(fā)現(xiàn),timer所在的函數(shù)和handletimer是來回執(zhí)行的,

11、個人理解是在這個函數(shù)執(zhí)行完之后才執(zhí)行這個handletimer的,設置成no時,handlettimer就只執(zhí)行一次.theconnection = nsurlconnection alloc initwithrequest:therequest delegate:self;nt =nstimer scheduledtimerwithtimeinterval:20 target: self selector: selector(handletimer) userinfo:nilrepeats:no;-(void)handletimer-(void)connection:(nsurlconnec

12、tion *)connectiondidreceiveresponse:(nsurlresponse *)responsewebdata setlength: 0;nslog(connection:didreceiveresponse:1);-(void)connection:(nsurlconnection *)connectiondidreceivedata:(nsdata*)datawebdata appenddata:data;nslog(connection:didreceivedata:2);/如果電腦沒有連接網(wǎng)絡,則出現(xiàn)此信息(不是網(wǎng)絡服務器不通)-(void)connectio

13、n:(nsurlconnection *)connectiondidfailwitherror:(nserror*)error/nslog(error with theconenction);theconnection release;theconnection = nil;webdata release;webdata = nil;-(void) connectiondidfinishloading:(nsurlconnection*) connection上面是我在用的時候所涉及的代碼,只寫出了函數(shù),可以自己實驗下,看函數(shù)的執(zhí)行順序以及同異步的關系propery講解property是一個屬

14、性訪問聲明,擴號內支持以下幾個屬性:1,getter=gettername,setter=settername,設置setter與getter的方法名2,readwrite,readonly,設置可供訪問級別2,assign,setter方法直接賦值,不進行任何retain操作,為了解決原類型與環(huán)循引用問題3,retain,setter方法對參數(shù)進行release舊值再retain新值,所有實現(xiàn)都是這個順序(cc上有相關資料)4,copy,setter方法進行copy操作,與retain處理流程一樣,先舊值release,再copy出新的對象,retaincount為1。這是為了減少對上下文的

15、依賴而引入的機制。5,nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務訪問。鎖被加到所屬對象實例級(我是這么理解的.)。經(jīng)常備用到的參數(shù)是 copy/reain/assign。在其中選擇一個來確定屬性的setter如何處理這個屬性。很多objective-c中的object最好使用用retain,一些特別的object(例如:string)使用copy。assign關鍵字代表setter直接賦值,而不是復制或者保留它。這種機制非常適合一些基本類型,比如nsinteger和cgfloat,或者你并不直接擁有的類型,比如

16、delegates。readonly關鍵字代表setter不會被生成, 所以它不可以和 copy/retain/assign組合使用。我們把 summary 定義為 readonly 是因為它并不需要一個專門的類變量,相應的,我們會在用到的時候動態(tài)生成它:定時器設置定時器下面顯示的定時器將在一秒鐘后觸發(fā),并一直重復直到定時器被禁用。定時器每次激活時,就會調用發(fā)送選擇器消息的目標來進行初始化?;卣{方法帶有一個參數(shù),就是定時器本身.要禁用一個定時器,給它發(fā)送invalidate消息,這將釋放定時器對象并把它從當前運行循環(huán)中刪除。nstime *timer ;timer = nstimer sche

17、duledtimerwithtimeinterval:1.0target:self selector:selector(handltimer:) userinfo:nilrepeats:yes;- (void)handletimer:(nstimer *)timerprintf(timer count: %d, count+);if(count 3)timer invalidate;iphone開發(fā)之 啟動頁面設置(重要的iphone開發(fā)經(jīng)驗)不管是開發(fā)個人項目還是公司項目,大家通常都有一個需求,就是,在app啟動的時候,指定一定的時間來顯示自己的或者公司的logo,那么,我就將剛剛寫好的啟動

18、加載頁面設置代碼貢獻出來。這里我需要用到nstimer這個東西,相關的內容可以查看api,有比較詳細的解釋。新建一個項目,隨便是什么項目,我建立的是“view based application”,然后,命名為“l(fā)ogo”,然后確定。直接編輯“resources目錄下的logoviewcontroller.xib”。將背景顏色改稱綠色,主要是為了當從logo頁跳轉過來的時候能有感覺到變化。然后新建一個nstimer.logoviewcon*lo = logoviewconalloc initwithnibname:logoviewconbundle:nil;self.logo = lo;lo

19、release;windowaddsubview:self.logo.view;/初始化timmernstimer*timer = nstimerscheduledtimerwithtimeinterval: 1.5target: selfselector:selector(logo:) userinfo: nilrepeats: yes;注意,初始化的代碼中有這么一段:selector(logo:),其中的方法就是當這個1.5秒時間過去之后自動調用的方法。-(void) logo:(nstimer*)timerlogo.view removefromsuperview;timer inval

20、idate;/這句代碼用來終止timmer,否則,每過1.5秒,就會執(zhí)行該方法一次,我們是要在開始的時候執(zhí)行一次就夠了。線程(重要基礎知識)1. 創(chuàng)建一個新的線程:nsthread detachnewthreadselector:selector(mymethod) totarget:self withobject:nil;2. 創(chuàng)建線程所調用的方法:-(void)mymethod nsautoreleasepool *pool =nsautoreleasepool alloc init;*code that should be run in the newthread goes here *

21、pool release;假如我們需要在線程里面調用主線程的方法函數(shù),就可以用performselectoronmainthread來實現(xiàn):self performselectoronmainthread:selector(mymethod) withobject:nil waituntildone:false;super viewdidload;是什么意思?有什么作用?-(void)viewdidload函數(shù)里邊 super viewdidload 是必須的嘛?首先,viewdidload是視圖控制器類用于加載視圖的方法。其次,super就是調用父類中的方法。super viewdidloa

22、d就是調用父類中的viewdidload方法。父類中的viewdidload會幫助你做一些初始化的工作,比如a是基類,b從a繼承,b在viewdidload方法中創(chuàng)建和初始化了一些成員,c繼承b,如果c在調用viewdidload的時候沒有調用super的viewdidload方法,那么就會有一些成員沒有被初始化,可能就會產生問題。 為何需要調用“super viewdidload”?- (void)didreceivememorywarning super didreceivememorywarning;- (void)viewdidload super viewdidload;在上面的代碼

23、中,什么需要調用父類相應的方法呢?以viewdidload為例,父類(super)中的viewdidload會幫助你做一些初始化的工作,比如a是父類,b繼承a,b在viewdidload方法中創(chuàng)建和初始化了一些成員;c又繼承b,此時,如果c在調用viewdidload的時候沒有調用super的viewdidload方法,那么就會有一些成員沒有被初始化,可能就會產生問題。 initwithframe: 和 initwithcoder: 區(qū)別1.initwithcoder: 對于.xib,視圖加載時默認調用的是該方法;2.initwithframe: 非.xib的手動編碼,視圖加載時默認調用的是該

24、方法。所有初始化的代碼都放到上面方法內部調用。另,對于.xib,也可以在awakefromnib方法里面放額外的初始化動作。objective-c利用協(xié)議實現(xiàn)回調函數(shù)(類似java的回調函數(shù))在編寫iphone開發(fā)時,最常用的就是回調函數(shù)。自己編寫回調函數(shù),實現(xiàn)動態(tài)加載數(shù)據(jù),加載完數(shù)據(jù)之后就利用回調函數(shù)通知給前臺頁面,顯示相應數(shù)據(jù)的界面。在iphone中利用協(xié)議可以很容易的實現(xiàn)回調函數(shù),后臺加載數(shù)據(jù),然后顯示在前臺頁面。- (id)init / 先讓父類別進行初始化if (self = super init) / do somethingreturn self;if(self=super in

25、it) 首先的是super init,使超類完成自己的初始化工作。if(self=superinit)這條語句的意思,super init是初始化父類中的變量方法,self=superinit就相當于子類也初始化了這些變量和方法,而用if判斷下,是為了防止self為空的情況,即創(chuàng)建失敗的情況。self被指定為返回值,這個返回值通過self superinit中發(fā)送給super對象的init消息得來。它只意味著在object-c中我們必須手工調用父類得init方法。沒有對父類的自動調用。我們必須指定self為superinit的返回值,因為它可能會返回nil。(非常重要的語法知識)objecti

26、ve-c創(chuàng)建對象需通過兩個消息:alloc以及init。alloc的作用是分派存儲器空間,init則是對對象做初始化。init與alloc都是定義在nsobject里的類方法,當對象收到這兩個消息并做出正確回應后,新實體才算準備妥當。- (id) init if (self = superinit)return (self);父類進行初始化時,用的是子類對象指針self,父類的init方法有可能對這個指針指向的內存區(qū)作了大的變更(有可能把這個指針所指的內存釋放了,重新分配了另一塊內存區(qū)域返回來,這時這個返回的指針與原來的指針是指向不同地址的),所以父類初始化后要重新返回指針。父類返回的和子類的

27、self的類型都為id類型(通用類型)。父類的init方法若返回的指針與self不一樣,在父類的init方法中已作了release和新的內存分配,不需要自己再去release sef,直接用父類init方法返回的指針就可以了。if(self = super init) 若要超類可以完成所需得一次性初始化需要調用super initinit 方法返回得值(id型數(shù)據(jù) 即泛型指針)描述被初始化對象。printf(%d,max(a,b);把 max(a,b)作為printf函數(shù)的一個參數(shù)。類方法是通過給類而不是對象發(fā)送消息來調用的。 下面是一例子: nscalendardate *now; now=

28、nscalendardate calendardate; +(id)datewithyear:(int)year mouth:(unsigned) month day: (unsigned) day hour:(unsigned) minute second:(unsigned)second timezone:(nstimezone *)atimezone 類方法返回一個自動釋放的對象。特別的是,這個類方法使用的參數(shù)所指定 的值來創(chuàng)建并初始一個日歷數(shù)據(jù)。nscalendardate這個類,在mac開發(fā)中很常 用。 objective-c中的方法有兩種:類方法和實例方法。objective-c利

29、用協(xié)議實現(xiàn)回調函數(shù)(類似java的回調函數(shù)) 在編寫iphone開發(fā)時,最常用的就是回調函數(shù)。自己編寫回調函數(shù),實現(xiàn)動態(tài)加載數(shù)據(jù),加載完數(shù)據(jù)之后就利用回調函數(shù)通知給前臺頁面,顯示相應數(shù)據(jù)的界面。在iphone中利用協(xié)議可以很容易的實現(xiàn)回調函數(shù),后臺加載數(shù)據(jù),然后顯示在前臺頁面。font=宋體 網(wǎng)絡的回調函數(shù), 如果你指的是- (void)connectiondidfinishloading:(nsurlconnection *)connection; 那么只有在全部數(shù)據(jù)接收完后才會被系統(tǒng)調用 如果你想收到一點就處理一點的話 - (void)connection:(nsurlconnection

30、 *)connection didreceivedata:(nsdata *)data; 這個回調能滿足你的要求 總之, 你先弄明白什么叫回調函數(shù)吧。才能學會調接口,從服務器上取數(shù)據(jù),顯示到手機界面上。(非常重要的基礎語法知識) 所謂回調函數(shù),是指callback,請先理解。 回調函數(shù)的理解 所謂回調,就是客戶程序c調用服務程序s中的某個函數(shù)a,然后s又在某個時候反過來調用c中的某個函數(shù)b,對于c來說,這個b便叫做回調函數(shù)。 例如win32下的窗口過程函數(shù)就是一個典型的回調函數(shù)。一般說來,c不會自己調用b,c提供b的目的就是讓s來調用它,而且是c不得不提供。 由于s并不知道c提供的b姓甚名誰,

31、所以s會約定b的接口規(guī)范(函數(shù)原型),然后由c提前通過s的一個函數(shù)r告訴s自己將要使用b函數(shù), 這個過程稱為回調函數(shù)的注冊,r稱為注冊函數(shù)。webservice以及java的rmi都用到回調機制,可以訪問遠程服務器程序。 其實回調函數(shù)并不神秘 對于很多初學者來說,往往覺得回調函數(shù)很神秘,很想知道回調函數(shù)的工作原理。 c語言回調函數(shù) 對指針的應用是c語言編程的精髓所在,而回調函數(shù)就是c語言里面對函數(shù)指針的高級應用。簡而言之,回調函數(shù)是一個通過函數(shù)指針調用的函數(shù)。 如果你把函數(shù)指針(函數(shù)的入口地址)傳遞給另一個函數(shù),當這個函數(shù)指針被用來調用它所指向的函數(shù)時,我們就說這個函數(shù)是回調函數(shù)。 什么是回調

32、函數(shù)? 簡而言之,回調函數(shù)就是一個通過函數(shù)指針調用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用為調用它所指向的函數(shù)時,我們就說這是回調函數(shù)。 font=宋體 tcp/ip 建立連接的過程 在tcp/ip協(xié)議中,tcp協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。 第一次握手:建立連接時,客戶端發(fā)送連接請求到服務器,并進入syn_send狀態(tài),等待服務器確認; 第二次握手:服務器收到客戶端連接請求,向客戶端發(fā)送允許連接應答,此時服務器進入syn_recv狀態(tài); 第三次握手:客戶端收到服務器的允許連接應答,向服務器發(fā)送確認,客戶端和服務器進入通信狀態(tài),完成三次握手

33、。 (所謂的三次握手就是要有三次連接信息的發(fā)送/接收過程。tcp連接的建立需要進行三次連接信息的發(fā)送/接收。)什么是udp和tcp的區(qū)別是什么?tcp的全稱為傳輸控制協(xié)議。這種協(xié)議可以提供面向連接的、可靠的、點到點的通信。udp全稱為用戶數(shù)據(jù)報協(xié)議,它可以提供非連接的不可靠的點到多點的通信。用tcp還是udp,那要看你的程序注重哪一個方面?可靠還是快速?iphone-uiviewcontroller與uiview的關系uiviewcontroller和uiview是兩個不同的類uiviewcontroller是視圖控制器 而uiview是視圖也就是說,uiviewcontroller是控制ui

34、view的。 你也可以認為uiviewcontroller就是一個相框 而uiview就是一個相片相框可以隨時隨地的拿走這個相片而換另外一張相片或者在這張相片上加一個新的相片。而相片卻不能操縱相框的。 uiview工作在第一線,向用戶展示表現(xiàn)的內容,并接受用戶的交互。uiviewcontroller相當于導演,按照計劃編排屬下的uiview以何種形式展現(xiàn),其中包含一些花哨的技巧,如翻轉、淡入淡出等。 uivewcontroller的另一個功能是處理用戶交互操作,注意這里我說的是處理,當然uiviewcontroller本身是不知道用戶交互的,這就需要uiview將用戶的交互操作(例如:touc

35、hesbegintouchesmoved)傳遞上來。一般常用的兩種方法完成這種傳遞: 1、self nextresponder touchesbegin:touches. 2、使用notification 不管以何種方式,如果uiviewcontroller得到了用戶的輸入,那么它應該對uiview做些改變以響應用戶的輸入,這里要注意uiviewcontroller應該只改變uiview的表現(xiàn),而不應該處理其它事情,更多的操作通過delegate來進行,關于delegate的應用場合下次講解消息的傳遞方式中一起闡述。uiview是一個視圖,uiviewcontroller是一個控制器,每一個v

36、iewcontroller管理著一個view特別注意:在objective-c中,這句話中,if(self=super init)為什么不用“=”而用=這里不是判斷self與super init是否相等,而是判斷是否可以成功初始化。super init:父類初始化成功的話,通過=給self,這樣self成為一個非空對象,整個來說即非false(非no)。于是也就變成了:if ( !false )/成功初始化后執(zhí)行的代碼 如果init失敗 self則為空 if條件為假,于是if段內語句不執(zhí)行非常重要的基礎語法知識在objective-c中#pragma mark是什么意思?經(jīng)常在 xcode i

37、de 里面的代碼中看到以下代碼指令:#pragma mark -#pragma mark initialization#pragma 是什么從技術上講,以 #pragma 開頭的代碼是一條編譯器指令,是一個特定于程序或編譯器的指令。它們不一定適用于其它編譯器或其它環(huán)境。如果編譯器不能識別該指令,則會將其忽略。作用它們告訴xcode編譯器,要在編輯器窗格頂部的方法和函數(shù)彈出菜單中將代碼分隔開,如下圖所示:一些類(尤其是一些控制器類)可能很長,方法和函數(shù)彈出菜單可以便于代碼導航。此時加入#pragma 指令對代碼進行邏輯組織很有效果。注意1 #pragma mark 的“-”后面不能有空格。2 如

38、果你的標志沒有出現(xiàn)在彈出菜單中,比如沒有分隔線出現(xiàn),請在xcode菜單 “preferences.”中的 “code sense”選項取消選中”sort list alphabetically”即可在objective-c中何時用self.何時不用?(非常重要的基礎語法知識)今天在看iphone開發(fā)基礎教程第七章的時候,代碼比著書上的寫,但是出錯了。排了下錯發(fā)現(xiàn)是在數(shù)據(jù)源的一個方法中pickerdata已經(jīng)變成了空,沒法用了,這個本來不應該是空值的。仔細比較了下我寫的代碼和書上的代碼,發(fā)現(xiàn)是singlecomponentpickerviewcontroller.m中的viewdidload中的

39、self.pickerdata = array;寫成了pickerdata = array; 少了個self. 。為什么少寫了self.就出錯了呢?加個self.有什么作用嗎?還記得在對應的頭文件中這樣寫的吧:property (nonatomic, retain) nsarray * pickerdata; ? 關鍵是retian,如果不明白這里為什么要用retain,請看objective-c基礎教程第134頁講解內存管理的地方。然后到這里如果還不明白,就需要看objective-c基礎教程第167頁“如果點表達式出現(xiàn)在等號(=)左邊,該屬性名稱的setter方法(-setrainhand

40、ling:和-setsnowhandling:)將被調用。如果點表達式出現(xiàn)在對象變量右邊,則該屬性名稱的getter(-rainhandling和-snowhandling)將被調用”。還有第172頁中間有一段說“如果只使用裸名name,編譯器將假設我們直接修改了實例變量。要使用訪問器方法,我們可以寫self setname:car”。這里就是說,加個self.是為了調用對應的set方法,如果不加,就不調用,不掉用就會造成pickerdata的retaincount不加一,不加一就會被直接釋放,結果就是在數(shù)據(jù)源那個方法中得到空值,沒法使用,程序崩潰。所以需要調用對應的方法就加上self. ,不

41、需要就不加。附:viewdidload的代碼:- (void)viewdidloadsuper viewdidload;nsarray * array = nsarray alloc initwithobjects:luke, leia, han, chewbacca, artoo, threepio, lando, nil;self.pickerdata= array;array release; /如果不加self.就會在這里把array直接完全釋放,結果array就沒法用了。switch實例switch(表達式)case 常量或常量表達式1:語句1;break;case 常量或常量表達式

42、2:語句1;break;.case 常量或常量表達式n:語句n;break;default :語句n+1;計算表達式的值,并逐個與其后面的常量或常量表達式值相比較,當switch上的表達式的值與某個case下的常量表達式的值相等時,即執(zhí)行其后的語句。如:switch表達式的值與所有case后面的常量表達式均不相同時,則執(zhí)行default后的語句。另外須特別注意的是,如果你忘了寫break語句的話,當switch表達式的值與某個case常量表達式的值相等時,系統(tǒng)執(zhí)行所有case后的語句。例題: int i=4;switch (i)case 1:nslog(我是1);break;case 2:ns

43、log(我是2);break;case 3:nslog(我是3);break;default:nslog(我不是1,2,3);break;程序結果:我不是1,2,3程序詳解:當程序執(zhí)行switch語句的時候,發(fā)現(xiàn)i的值是4,于是將其和每個case后面的數(shù)字進行比較。發(fā)現(xiàn)不等于的時候跳到后面的case語句再次進行類似的比較,直到比較結束,發(fā)現(xiàn)都不符合條件,于是執(zhí)行default中的語句,將我不是1,2,3打印到控制臺上,然后通過break語句結束整個switch語句-(ibaction)changecolor:(id)sender/更改顏色uisegmentedcontrol *control = sender;nsinteger index = control selectedsegmentindex;/得到第幾個分段qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論