iOS面試題7(答案)

1、main(){ inta[5]={}; int *ptr=(int*)( a+1); printf("%d%d",*(a+1),*(ptr-1)); } 

答:25。

*(a+1)就是a[1]*(ptr-1)就是a[4]執行結果是25

 a+1不是首地址+1,編制會認爲加一個a數組的偏移,是偏移了一個數組的大小(本例是5intint *ptr=(int *)( a+1);

ptr實際是 (a[5])也就是a+5

原因如下:  a是數組指針,其類型爲int (*)[5];而 指針加1要根據指針類型加上一定的值,不同類型的指針+1之後增加的大小不同。a是長度爲5int數組指針,所以要加 5*sizeof(int)所以ptr實際是a[5]但是prt( a+1)類型是不一樣的(這點很嚴重)所以prt-1只會減去sizeof(int*) a a的地址是一樣的,但意思不一樣a是數組首地址,也就是a[0]的地址, a是對象(數組)首地址,a+1是數組下一元素的地址,即a[1] a+1是下一個對象的地址,即a[5].

 2、以下爲WindowsNT下的32位C++程序,請計算sizeof的值void Func ( char str[100]){sizeof( str ) =?}void *p = malloc( 100 );sizeof ( p ) = ?

這題 很常見了Func (char str[100])函數中數組名作爲函數形參時,在函數體內,數組名遺失了本身的內在,僅僅只是一個指針;在遺失其內在的同時,它還遺失了其常量特性,可以作自增、自減等操作,可以被修改。Windows NT 32位平臺下,指針的長度(佔用內存的大小)爲4字節,故sizeof( str )sizeof ( p ) 都爲4


3、還是考指針不過我對cocoa的代碼還是不太諳習 大概是這樣的 void*getNSString(constNSString * inputString) { is amaintest\n"; return ; } -main(void) { NSString"; NSString*aString = [NSStringstringWithString:@"%@"getNSString(a)]; NSLog(@"%@\n"aString); } 最後問輸出的字符串:NULLoutput在函數返回後,內存已經被開釋。對比一下iOS開發。


4、用預處理指令#define聲明一個常數,用以表明1年中有多少秒(馬虎閏年問題) #define SECONDS_PER_YEAR(60 * 60 * 24 *365)UL我在這想看到幾件事 情:#define語法的基礎學問(例如:不能以分號結束,括號的使用,等等);懂得預處理器將爲你計算常數表達式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。;意識到這個表達式將使一個16位機的整型數溢出-因此要用到長整型符號L告訴編譯器這個常數是的長整型數。;如果你在你的表達式中用到UL(表示無符號長整型),那麼你有了一個好的起點。記住,第一印象很嚴重。 

寫一個"標準"MIN,這個宏輸入兩個參數並返回較小的一個。  #defineMIN(AB) ((A) <= (B) ? (A) :(B))個測試是爲下面的目的而設的:標識#define在宏中應用的基礎學問。這是很嚴重的,因爲直到嵌入(inline)操作符變爲標準C的一局部,iphone

宏是方便產生嵌入代碼的唯一方法,對付嵌入式編制來說,爲了能達到要求的性能,嵌入代碼經常是必須的方法。

三重條件操作符的學問。這個操作符存在C言語中的原因是它使得編譯器能產生比 if-then-else更優化的代碼,瞭解這個用法是很嚴重的。 

懂得在宏中小心地把參數用括號括起來我也用這個問題開始討論宏的副作用,例如:當你寫下面的代碼時會發生什麼事?least = MIN(*p++b);

 結果是:((*p++) <= (b) ? (*p++) : (*p++))這個表達式會產生副作用,指針p會作三次++自增操作。  


5、寫一個委託的interface @protocolMyDelegate;@interface MyClass:NSObject { id <MyDelegate>delegate; } // 委託方法 @protocolMyDelegate - (void)didJobs:(NSArray*)args; @end 6.寫一個NSString類的完成 +(id)initWithCString:(constchar *)nullTerminatedCStringencoding:(NSStringEncoding)encoding; + (id) stringWithCString:(const char*)nullTerminatedCStringencoding: (NSStringEncoding)encoding{NSString*obj; obj =[self allocWithZone: NSDefaultMallocZone()];obj = [obj initWithCString:nullTerminatedCString encoding: encoding];return AUTORELEASE(obj);}


6、obj-c有多重繼承麼?不是的話有什麼替代方法? 

 cocoa中所有的類都是NSObject 的子類 多繼承在這裏是用protocol委託代理 來完成的你不用去思索繁瑣的多繼承 虛基類的概念. ood的多態特性在 obj-c中通過委託來完成. 


7、obj-c有私有方法麼?私有變量呢 objective-c -類裏面的方法唯有兩種 靜態方法和實例方法這似乎就不是完整的面向對象了按照OO的原則就是一個對象只暴露有用的東西.如果沒有了私有方法的話 對付一些小侷限的代碼重用就不那麼利市了在類裏面聲名一個私有方法 @interface Controller :NSObject { NSString *something; } +(void)thisIsAStaticMethod; -(void)thisIsAnInstsome kind ofceMethod; @end @interface Controller(private) - (void)thisIsAPrivateMethod; @end @private可以用來修飾私有變量 ObjectiveC中,所有實例變量默認都是私有的,所有實例方法默認都是公有的 


8、關鍵字const有什麼含意?修飾類呢?static的作用用於類呢?還有extern c的作用 const意味着"只讀",下面的聲明都是什麼意思?const int a;int const a;const int *a;int * const a;int const * a const; 前兩個的作用是一樣,a是一個常整型數。第三個意味着a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最後一個意味着a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。

 結論:關鍵字const的作用是爲給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數爲常量是爲了告訴了用戶這個參數的應用目的。如果你曾花很多時間清理其它人留下的渣滓,你就會很快學會感謝這點多餘的信息。Windows Mobile。(當然,懂得用const的程序員很少會留下的渣滓讓別人來清理的。)通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。合理地使用關鍵字const可以使編譯器很自然地保護那些不理想被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少insect的出現。  

1)欲阻止一個變量被改變,可以使用 const關鍵字。在定義該 const 變量時,通常須要對它進行初始化,因爲以後就沒無機會再去改變它了;

2)對指針來說,可以指定指針本身爲 const,也可以指定指針所指的數據爲 const,或二者同時指定爲 const

3)在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數外部不能改變其值;

4)對付類的成員函數,若指定其爲 const類型,則表明其是一個常函數,不能修改類的成員變量;

5)對付類的成員函數,有時期必須指定其返回值爲 const 類型,以使得其返回值不爲“左值”。 關鍵字volatile有什麼含意?並給出三個不同的例子。 一個定義爲volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,面試題解答。而不是使用保存在寄存器裏的備份。下面是volatile變量的幾個例子: 並行設備的硬件寄存器(如:狀態寄存器) 一箇中斷服務子程序中會訪問到的非主動變量(Non-automaticvariables)?; 多線程應用中被幾個任務共享的變量 一個參數既可以是const還可以是volatile嗎?解釋爲什麼。 一個指針可以是volatile嗎?解釋爲什麼。

下面是答案:是的。一個例子是隻讀的狀態寄存器。它是volatile因爲它可能被意想不到地改變。它是const因爲程序不應該試圖去修改它。是的。儘管這並不很常見。一個例子是當一箇中服務子程序修該一個指向一個drink stationrier的指針時。 

static關鍵字的作用: 

1)函數體內 static變量的作用侷限爲該函數體,不同於 auto 變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值;

2)在模塊內的 static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;

3)在模塊內的 static 函數只可被這一模塊內的其它函數調用,這個函數的使用侷限被限制在聲明它的模塊內;

4)在類中的 static成員變量屬於整個類所擁有,對類的所有對象唯有一份拷貝;

5)在類中的 static 成員函數屬於整個類所擁有,這個函數不接收 this 指針,因而只能訪問類的static成員變量。 

extern "C"的作用 

1)被 extern "C"限定的函數或變量是extern 類型的; extern C/C++言語中表明函數和全局變量作用侷限(可見性)的關鍵字,該關鍵字告訴編譯器,其聲明的函數和變量可以在本模塊或 其它模塊中使用。 

2)被 extern "C"修飾的變量和函數是按照言語方式編譯和連接的;

 extern"C"的慣用法 

1)在 C++中引用 C言語中的函數和變量,在包括 言語頭文件(假設爲 cExamplifierle.h)時,需進行下列處理:extern "C"{#include "cExamplifierle.h"}而在 言語的頭文件中,對其外部函數只能指定爲 extern 類型,言語中不接濟 extern "C"聲明,在.c 文件中包括了 extern "C"時會出現編譯語法錯誤。其他手機開發。 

2)在 中引用C++言語中的函數和變量時,C++的頭文件需添加 extern "C",但是在 言語中不能直接引用聲明瞭 extern "C"的該頭文件,應該僅將 文件中將 C++中定義的 extern"C"函數聲明爲extern 類型。


9、爲什麼標準頭文件都有類似以下的佈局?

#ifndef__INCvxWorksh#define__INCvxWorksh#ifdef__cplusplusextern "C"{#endif#ifdef__cplusplus}#endif#endif 顯然,頭文件中的編譯宏“#ifndef__INCvxWorksh#define __INCvxWorksh#endif” 的作用是防止該頭文件被重複引用。

10、#import#include的區別@class?

 @class一般用於頭文件中須要聲明該類的某個實例變量的時期用到,在m文件中還是須要使用#import #import比起#include的好處就是不會引起交叉編譯 


11、MVC模式的理解?

 MVC設計模式思索三種對象:模型對象、視圖對象、和控制器對象。模型對象代表特別的學問和專業技能,它們負責保有應用程序的數據和定義操作數據的邏輯。視圖對象知道如何顯示應用程序的模型數據,而且可能允許用戶對其進行編輯。控制器對象是應用程序的視圖對象和模型對象之間的調解者。 


12、線程與進程的區別和聯繫? 進程和線程都是由操作編制所體會的程序運轉的基礎單元,編制使用該基礎單元完成編制對應用的併發性。 程和線程的主要差別在於它們是不同的操作編制資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行途徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。你看Windows Mobile,Windows Mobil。但對付一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。 


13、列舉幾種進程的同步機制,並比較其優缺點。你知道面試題。

 答案:原子操作信號量機制自旋鎖管程,會合,分佈式編制

進程之間通信的途徑

 答案:共享存儲編制消息傳遞編制管道:以文件編制爲基礎

進程死鎖的原因 

答案:資源競爭及進程推進秩序作歹

死鎖的4個必要條件 

答案:互斥、請求保持、不可剝奪、環路

死鎖的處理 

答案:鴕鳥策略、預防策略、制止策略、檢測與解除死鎖


14、堆和棧的區別?   

 管理方式:對付棧來講,是由編譯器主動管理,無需我們手工控制;對付堆來說,開釋勞動由程序員控制,容易產生memory leak。申請大小:棧:在Windows下棧是向低地址擴展的數據佈局,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是編制預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),其他手機開發。如果申請的空間突出棧的糟粕空間時,將提示overflow。因此,能從棧獲得的空間較小。

堆:堆是向高地址擴展的數據佈局,是不連續的內存區域。這是由於編制是用鏈表來存儲的空閒內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限於計算機編制中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。 碎片問題:對付堆來講,頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。對付棧來講,則不會存在這個問題,因爲棧是先進後出的隊列,他們是如此的一一對應,以至於永遠都不可能有一個內存塊從棧中間彈出 分配方式:堆都是動態分配的,沒有靜態分配的堆。

棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行開釋,對於Android開發。無需我們手工完成。 分配效率:棧是機器編制提供的數據佈局,計算機會在底層對棧提供接濟:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高。堆則是C/C++函數庫提供的,它的機制是很紛亂的。    

15、什麼是鍵-值鍵途徑是什麼

模型的本質是通過一個簡單的鍵(通常是個字符串)來指定的。視圖和控制器通過鍵來查找相應的屬性值。在一個給定的實體中,同一個屬性的所有值具有相同的數據類型。鍵-值編碼技術用於進行這樣的查找—它是一種間接訪問對象屬性的機制。 鍵途徑是一個由用點作分隔符的鍵組成的字符串,用於指定一個連接在一起的對象本質序列。第一個鍵的本質是由先前的本質決定的,接下來每個鍵的值也是絕對付其前面的本質。鍵途徑使您可以以獨立於模型完成的方式指定相關 對象的本質。通過鍵途徑,您可以指定對象圖中的一個任意深度的途徑,使其指向相關對象的特定屬性。 For examplifierle the key pathpostingdress.streetwould get the value of the postingdressobject as well asn determine thestreet property relative to the postingdress object. 

/16、cobj-c如何混用?

 1obj-c的編譯器處理後綴爲m的文件時,可以識別obj-cc的代碼,處理mm文件可以識別obj-ccc++代碼,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現obj-c的代碼,因爲cpp只是cpp

2) mm文件中混用cpp直接使用即可,所以obj-ccpp不是問題

3)在cpp中混用obj- c其實就是使用obj-c編寫的模塊是我們想要的。如果模塊以類完成,那麼要按照cpp class的標準寫類的定義,頭文件中不能出現obj-c的東西,包括#importcocoa的。

面試題解答。

完成文件中,即類的完成代碼中可以使用obj-c的東西,可以import只是後綴是mm如果模塊以函數完成,那麼頭文件要按c的格式聲明函數,完成文件中,c++函數外部可以用obj-c,但後綴還是mmm總結:只要cpp文件和cppinclude的文件中不包括obj-c的東西就可以用了,cpp混用obj-c的關鍵是使用接口,iOS開發。而不能直接使用完成代碼,實際上cpp混用的是obj-c編譯後的o文件,這個東西其實是無差別的,所以可以用。obj-c的編譯器接濟cpp. 


17、目標-動作機制?

 目標是動作消息的接收者。一個控件,其他手機開發。或者更爲常見的是它的單元,以插座變量(參見"插座變量"局部)的形式保有其動作消息的目標。 動作是控件發送給目標的消息,或者從目標的角度看,它是目標爲了響應動作而完成的方法。 程序須要某些機制來進行事件和指令的翻譯。這個機制就是目標-動作機制。

18、cocoa touch框架?

   iPhone OS 應用程序的基礎 CocoaTouch 框架重用了許多 Mac 編制的成熟模式,但是它更多地專注於觸摸的接口和優化。

UIKit 爲您提供了在 iPhone OS上完成圖形,事件驅動程序的基礎工具,其建立在和 Mac OS X 中一樣的 Foundation框架上,包括文件處理,網絡,字符串操作等。

Cocoa Touch 具有和 iPhone用戶接口一致的特殊設計

有了 UIKit,您可以使用 iPhone OS上的獨特的圖形接口控件,按鈕,以及全屏視圖的效用,您還可以使用加快儀和多點觸摸手勢來控制您的應用。

 各色俱全的框架 除了 UIKit 外,CocoaTouch 包括了創建世界一流 iPhone 應用程序須要的所有框架,從三維圖形,到專業音效,聽聽開發。

以至提供設備訪問 API以控制攝像頭,或通過 GPS 獲知當前位置。Cocoa Touch 既包括只須要幾行代碼就可以完成全部任務的強大的Objective-C 框架,也在須要時提供基礎的 言語 API 來直接訪問編制。

這些框架包括: Core Animation 通過 CoreAnimation,您就可以通過一個基於組合獨立圖層的簡單的編程模型來創建豐富的用戶體驗。 

Core Audio Core Audio是播放,你知道ios。處理和錄製音頻的專業技術, com的人員      

能夠輕鬆爲您的應用程序添加強大的音頻效用。 Core Data 提供了一個面向對象的數據管理解決計劃,它易於使用和理解,以至可處理任何應用或大或小的數據模型。 

效用列表:框架分類下面是 Cocoa Touch 中一小局部可用的框架:

 音頻和視頻Core AudioOpenALMedia Libreast supportryAV Foundation

數據管理Core DataSQLite

圖形和動畫Core AnimationOpenGL ESQuartz 2D

網絡/li>BonjourWebKitBSD Sockets

用戶應用Address BookCore LocationMap KitStore Kit


19、objc的內存管理 ?

如果您通過分配和初始化(比如[[MyClass alloc] init])的方式來創建對象,Windows Phone。您就擁有這個對象,須要負責該對象的開釋。這個規則在使用NSObject的便利方法new時也同樣適用。如果您拷貝一個對象,您也擁有拷貝得到的對象,事實上Windows Phone。須要負責該對象的開釋。如果您保持一個對象,您就局部擁有這個對象,須要在不再使用時開釋該對象。反過去,如果您從其它對象那裏接收到一個對象,則您不擁有該對象,也不應該開釋它(這個規則有少數的例外,在參考文檔中有顯式的說明)。


20、主動開釋池是什麼如何勞動?

 當您向一個對象發送一個autorelease消息時,Cocoa就會將該對象的一個引用放入到最新的主動開釋池。它仍然是個正當的對象,因此主動開釋池定義的作用域內的其它對象可以向它發送消息。當程序執行到作用域結束的位置時,主動開釋池就會被開釋,池中的所有對象也就被開釋。 1.ojc-c是通過一種"referring counting"(引用計數)的方式來管理內存的對象在開始分配內存(alloc)的時期引用計數爲一以後每當碰到有copyretain的時期引用計數都會加一每當碰到releaseautorelease的時期引用計數就會減一如果此對象的計數變爲了就會被編制銷燬.2. NSAutoreleasePool 就是用來做引用計數的管理勞動的這個東西一般不用你管的.3.autoreleaserelease沒什麼區別只是引用計數減一的時機不同而已autorelease會在對象的使用真正結束的時期才做引用計數減一

 

21、類工廠方法是什?

類工廠方法的完成是爲了向客戶提供方便,它們將分配和初始化合在一個步驟中,返回被創建的對象,並進行主動開釋處理。這些方法的形式是+ (type)className...(其中className不包括任何前綴)。 工廠方法可能不僅僅爲了方便使用。它們不但可以將分配和初始化合在一起,還可以爲初始化過程提供對象的分配信息。 類工廠方法的另一個目的是使類(比如NSWorkspace)提供單件實例。雖然init...方法可以確認一個類在每次程序運轉過程只存在一個實例,但它須要首先分配一個“生的”實例,然後還必須開釋該實例。你看解答。工廠 方法則可以制止爲可能沒有用的對象盲目分配內存。


22、單件實例是什麼?

 Foundation 和 ApplicationKit 框架中的一些類只允許創建單件對象,即這些類在當前進程中的唯一實例。舉例來說,NSFileMsome kind ofagerNSWorkspace類在使用時都是基於進程進行單件對象的實例化。當向這些類請求實例的時期,它們會向您傳遞單一實例的一個引用,如果該實例還不存在,則首先進行實例的分配和初始化。 單件對象充當控制中心的角色,負責指引或調解類的各種服務。如果類在概念上唯有一個實例(比如NSWorkspace),就應該產生 一個單件實例,而不是多個實例;如果將來某一天可能有多個實例,您可以使用單件實例機制,而不是工廠方法或函數。


23、動態綁定?

 —在運轉時確定要調用的方法 動態綁定將調用方法的確定也推遲到運轉時。在編譯時,方法的調用並不和代碼綁定在一起,唯有在消實發送出來之後,才確定被調用的代碼。通過動態類型和動態綁定技術,您的代碼每次執行都可以得到不同的結果。運轉時因子負責確定消息的接收者和被調用的方法。運轉時的消息分發機制爲動態綁定提供接濟。當您向一個動態類型確定了的對象發送消息時,運轉環境編制會通過接收者的isa指針定位對象的類,並以此爲起點確定被調用的方法,方法和消息是動態綁定的。而且,您不必在Objective-C代碼中做任何勞動,就可以主動獲取動態綁定的好處。您在每次發送消息時,特別是當消息的接收者是動態類型已經確定的對象時,你知道iOS開發。動態綁定就會例行而透明地發生。


24、obj-c的優缺點?

 objc優點:

1)Cateogies

2)Posing

3) 動態識別

4)指標計算

5)彈性訊息傳遞

6) 不是一個過度紛亂的 衍生言語

7) Objective-C 與 C++可混合編程

缺點:

1)不支援命名空間

2)不接濟運算符重載

3)不接濟多重繼承 

4)使用動態運轉時類型,所有的方法都是函數調用,所以很多編譯時優化方法都用不到。iPhone。(如內聯函數等),性能低劣。


25、sprintfstrcpymemcpy使用上有什麼要注意的地方?

 strcpy是一個字符串拷貝的函數,它的函數原型爲strcpy(char*dst const char *src); src開始的一段字符串拷貝到dst開始的內存中去,結束的標誌符號爲'\0',由於拷貝的長度不是由我們自己控制的,所以這個字符串拷貝很容易出錯。具備字符串拷貝效用的函數有memcpy,這是一個內存拷貝函數,它的函數原型爲memcpy(char *dst const char* src unsigned intlen); 將長度爲len的一段內存,從src拷貝到dst中去,這個函數的長度可控。但是會有內存疊加的問題。 sprintf是格式化函數。將一段數據通過特定的格式,格式化到一個字符串緩衝區中去。sprintf格式化的函數的長度不可控,有可能格式化後的字符串會超出緩衝區的大小,Android開發。造成溢出。


27. 用變量a給出下面的定義/

 a) 一個整型數(Aninteger

b)一 個指向整型數的指針( A pointer to some kind ofinteger

c)一個指向指針的的指針,它指向的指針是指向一個整型數( A pointer to a pointer to some kind ofinteger

d)一個有10個整型數的數組( An assortment of 10integers

e) 一個有10個指針的數組,該指針是指向一個整型數的。(An assortment of 10 pointers tointegers

f) 一個指向有10個整型數數組的指針( A pointer to some kind of assortment of 10integers

g) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A pointer to a function that takessome kind of integer as some kind of argumentsome kind ofd returns some kind ofinteger

h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An assortment of tenpointers to functions that take some kind of integer argument some kind ofd return some kind of integer

答 案是:

a) int a; // Aninteger

b) int *a; // A pointer to some kind ofinteger

c) int **a; // A pointer to a pointer to some kind ofinteger

d) int a[10]; // An assortment of 10integers

e) int *a[10]; // An assortment of 10 pointers tointegers

f) int (*a)[10]; // A pointer to some kind of assortment of 10integers

g) int (*a)(int); // A pointer to a function athattakes some kind of integer argument some kind ofd returns some kind ofinteger

h) int (*a[10])(int); // An assortment of 10 pointers tofunctionsthat take some kind of integer argument some kind ofdreturn some kind of integer


28.repostingwriterepostingonlyassignretaincopynonatomic屬性的作用?

@property是一個屬性訪問聲明,擴號內接濟以下幾個屬性:

1getter=getterNamesetter=setterName,設置settergetter的方法名

2repostingwriterepostingonly,設置可供訪問級別2assign,看看iOS開發。setter方法直接賦值,不進行 任何retain操作,爲了解決原類型與環循引用問題3retainsetter方法對參數進行release舊值再retain新值,所有完成都是這個秩序(CC上有相關原料)

4copysetter方法進行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對象,retainCount1。這是爲了減少對上下文的依賴而引入的機制。

5nonatomic,非原子性訪問,不加同步,多線程併發訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都爲原子型事務訪問。鎖被加到所屬對象實例級(我是這麼理解的...) @synthesizexxx;來完成實際代碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章