ios面試最長遇到的問題匯總

面是iOS開發(fā),面試官面試最基礎(chǔ)的問題后就是:

1. weak strong retain assign copy 的區(qū)別及具體的用法

幾乎所有的人都會答出weak是弱引用,strong是強引用,什么情況下用weak,大部分人能說出delegate,防block循環(huán)引用,再問一句weak的實現(xiàn)原理是什么?為什么對象釋放后會變成nil,到這,能知道答案的寥寥無幾,很少有人會說出“哈希表”這三個字,assign , setter 方法直接賦值,不進行任何 retain 操作,為了解決原類型與循環(huán)引用問題, retain ,setter 方法對參數(shù)進行 release 舊值再 retain 新值,所有實現(xiàn)都是這個順序, copy ,setter 方法進行 Copy 操作,與 retain 處理流程一樣,先舊值 release ,再 Copy 出新的對象, retainCount 為 1 。這是為了減少對上下文的依賴而引入的機制,copy,建立一個索引計數(shù)為 1 的對象,然后釋放舊對象,retain,釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計數(shù)為 1,簡單的說retain和copy的區(qū)別就是:retain 是指針拷貝, copy 是內(nèi)容拷貝

2. atomic nonatomic區(qū)別

atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。
atomic設(shè)置成員變量的@property屬性時,默認為atomic,提供多線程安全。 在多線程環(huán)境下,原子操作是必要的,否則有可能引起錯誤的結(jié)果。加了atomic,setter函數(shù)會變成下面這樣:

  {lock}
             if (property != newValue) { 
                 [property release]; 
                 property = [newValue retain]; 
                  }
   {unlock}

nonatomic

禁止多線程,變量保護,提高性能。atomic是Objc使用的一種線程保護技術(shù),基本上來講,是防止在寫未完成的時候被另外一個線程讀取,造成數(shù)據(jù)錯誤。而這種機制是耗費系統(tǒng)資源的,所以在iPhone這種小型設(shè)備上,如果沒有使用多線程間的通訊編程,那么nonatomic是一個非常好的選擇。
指出訪問器不是原子操作,而默認地,訪問器是原子操作。這也就是說,在多線程環(huán)境下,解析的訪問器提供一個對屬性的安全訪問,從獲取器得到的返回值或者通過設(shè)置器設(shè)置的值可以一次完成,即便是別的線程也正在對其進行訪問。如果你不指定 nonatomic ,在自己管理內(nèi)存的環(huán)境中,解析的訪問器保留并自動釋放返回的值,如果指定了 nonatomic ,那么訪問器只是簡單地返回這個值。

1.Difference between shallow copy and deep copy?淺復(fù)制和深復(fù)制的區(qū)別?
答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔槪粡?fù)制引用對象本身。深層復(fù)制:復(fù)制引用對象本身。意思就是說我有個A對象,復(fù)制一份后得到A_copy對象后,對于淺復(fù)制來說,A和A_copy指向的是同一個內(nèi)存資源,復(fù)制的只不過是是一個指針,對象本身資源還是只有一份,那如果我們對A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對象同樣被修改,這其實違背了我們復(fù)制拷貝的一個思想。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨立對象本身。用網(wǎng)上一哥們通俗的話將就是:淺復(fù)制好比你和你的影子,你完蛋,你的影子也完蛋深復(fù)制好比你和你的克隆人,你完蛋,你的克隆人還活著。

2.What is advantage of categories? What is difference between implementing a category and inheritance?類別的作用?繼承和類別在實現(xiàn)中有何區(qū)別?
答案:category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法,因為類別具有更高的優(yōu)先級。類別主要有3個作用:(1)將類的實現(xiàn)分散到多個不同文件或多個不同框架中。(2)創(chuàng)建對私有方法的前向引用。(3)向?qū)ο筇砑臃钦絽f(xié)議。 繼承可以增加,修改或者刪除方法,并且可以增加屬性。

3.Difference between categories and extensions?類別和類擴展的區(qū)別。
答案:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實現(xiàn)的。extensions可以認為是一個私有的Category。簡單的將,通過Categories(分類)即使在沒有某個類源代碼的情況下,也可以為這個類添加新的方法聲明。而新方法的實現(xiàn)可以在另外的文件中。

而通過Extensions(擴展)可以很好的解決兩個問題。
1.使編輯器可以更好的驗證類的私有方法,參照下面代碼:

[cpp] view plaincopy
// .m
@interface BaseClass()

  • (void)doSomethingPrivate;

@end

@implementation BaseClass
...
@end

  1. 某些情況下,我們需要聲明一個@property,它對外是只讀的(readonly),而對內(nèi)是可讀寫的(readwrite),這時,可以通過Extensions實現(xiàn)

[cpp] view plaincopy
// .h
@interface BaseClass : NSObject
@property (readonly) NSString *privateString;
@end

// .m
@interface BaseClass()
@property (readwrite) NSString *privateString;
@end

@implementation BaseClass
@synthesize privateString;
...
@end

4.Difference between protocol in objective c and interfaces in java?obc中的協(xié)議和java中的接口概念有何不同?
答案:OBC中的代理有2層含義,官方定義為 formal和informal protocol。前者和Java接口一樣。informal protocol中的方法屬于設(shè)計模式考慮范疇,不是必須實現(xiàn)的,但是如果有實現(xiàn),就會改變類的屬性。其實關(guān)于正式協(xié)議,類別和非正式協(xié)議我很早前學(xué)習(xí)的時候大致看過,也寫在了學(xué)習(xí)教程里“非正式協(xié)議概念其實就是類別的另一種表達方式“這里有一些你可能希望實現(xiàn)的方法,你可以使用他們更好的完成工作”。這個意思是,這些是可選的。比如我門要一個更好的方法,我們就會申明一個這樣的類別去實現(xiàn)。然后你在后期可以直接使用這些更好的方法。這么看,總覺得類別這玩意兒有點像協(xié)議的可選協(xié)議。"現(xiàn)在來看,其實protocal已經(jīng)開始對兩者都統(tǒng)一和規(guī)范起來操作,因為資料中說“非正式協(xié)議使用interface修飾“,現(xiàn)在我們看到協(xié)議中兩個修飾詞:“必須實現(xiàn)(@requied)”和“可選實現(xiàn)(@optional)”。

5.What are KVO and KVC?
答案:kvc:鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標識屬性,而不是通過調(diào)用存取方法,直接或通過實例變量訪問的機制。很多情況下可以簡化程序代碼。apple文檔其實給了一個很好的例子。kvo:鍵值觀察機制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。具體用看到嗯哼用到過的一個地方是對于按鈕點擊變化狀態(tài)的的監(jiān)控。比如我自定義的一個button[cpp] [self addObserver:self forKeyPath:@"highlighted" options:0 context:nil]; #pragma mark KVO - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"highlighted"] ) { [self setNeedsDisplay]; } }
對于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變,理論上來說是和kvc機制的道理是一樣的。對于kvc機制如何通過key尋找到value:“當(dāng)通過KVC調(diào)用對象時,比如:[self valueForKey:@”someKey”]時,程序會自動試圖通過幾種不同的方式解析這個調(diào)用。首先查找對象是否帶有 someKey 這個方法,如果沒找到,會繼續(xù)查找對象是否帶有someKey這個實例變量(iVar),如果還沒有找到,程序會繼續(xù)試圖調(diào)用 -(id) valueForUndefinedKey:這個方法。如果這個方法還是沒有被實現(xiàn)的話,程序會拋出一個NSUndefinedKeyException異常錯誤。 (cocoachina.com注:Key-Value Coding查找方法的時候,不僅僅會查找someKey這個方法,還會查找getsomeKey這個方法,前面加一個get,或者_someKey以及_getsomeKey這幾種形式。同時,查找實例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在。) 設(shè)計valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(id)valueForKey方法從對象中請求值時,對象能夠在錯誤發(fā)生前,有最后的機會響應(yīng)這個請求。這樣做有很多好處,下面的兩個例子說明了這樣做的好處。“來至cocoa,這個說法應(yīng)該挺有道理。因為我們知道button卻是存在一個highlighted實例變量.因此為何上面我們只是add一個相關(guān)的keypath就行了,可以按照kvc查找的邏輯理解,就說的過去了。

6.What is purpose of delegates?代理的作用?
答案:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架復(fù)雜度。另外一點,代理可以理解為java中的回調(diào)監(jiān)聽機制的一種類似。

7.What are mutable and immutable types in Objective C?obc中可修改和不可以修改類型。
答案:可修改不可修改的集合類。這個我個人簡單理解就是可動態(tài)添加修改和不可動態(tài)添加修改一樣。比如NSArray和NSMutableArray。前者在初始化后的內(nèi)存控件就是固定不可變的,后者可以添加等,可以動態(tài)申請新的內(nèi)存空間。

8.When we call objective c is runtime language what does it mean?我們說的obc是動態(tài)運行時語言是什么意思?
答案:多態(tài)。 主要是將數(shù)據(jù)類型的確定由編譯時,推遲到了運行時。這個問題其實淺涉及到兩個概念,運行時和多態(tài)。簡單來說,運行時機制使我們直到運行時才去決定一個對象的類別,以及調(diào)用該類別對象指定方法。多態(tài):不同對象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。意思就是假設(shè)生物類(life)都用有一個相同的方法-eat;那人類屬于生物,豬也屬于生物,都繼承了life后,實現(xiàn)各自的eat,但是調(diào)用是我們只需調(diào)用各自的eat方法。也就是不同的對象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat這個選擇器)。因此也可以說,運行時機制是多態(tài)的基礎(chǔ)?~~~

9.what is difference between NSNotification and protocol?通知和協(xié)議的不同之處?
答案:協(xié)議有控制鏈(has-a)的關(guān)系,通知沒有。首先我一開始也不太明白,什么叫控制鏈(專業(yè)術(shù)語了~)。但是簡單分析下通知和代理的行為模式,我們大致可以有自己的理解簡單來說,通知的話,它可以一對多,一條消息可以發(fā)送給多個消息接受者。代理按我們的理解,到不是直接說不能一對多,比如我們知道的明星經(jīng)濟代理人,很多時候一個經(jīng)濟人負責(zé)好幾個明星的事務(wù)。只是對于不同明星間,代理的事物對象都是不一樣的,一一對應(yīng),不可能說明天要處理A明星要一個發(fā)布會,代理人發(fā)出處理發(fā)布會的消息后,別稱B的發(fā)布會了。但是通知就不一樣,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣要處理。因此控制鏈(has-a從英語單詞大致可以看出,單一擁有和可控制的對應(yīng)關(guān)系。

10.What is push notification?什么是推送消息?

11.Polymorphism?關(guān)于多態(tài)性
答案:多態(tài),子類指針可以賦值給父類。這個題目其實可以出到一切面向?qū)ο笳Z言中,因此關(guān)于多態(tài),繼承和封裝基本最好都有個自我意識的理解,也并非一定要把書上資料上寫的能背出來。最重要的是轉(zhuǎn)化成自我理解。

12.Singleton?對于單例的理解
答案:11,12題目其實出的有點泛泛的感覺了,可能說是編程語言需要或是必備的基礎(chǔ)。基本能用熟悉的語言寫出一個單例,以及可以運用到的場景或是你編程中碰到過運用的此種模式的框架類等。進一步點,考慮下如何在多線程訪問單例時的安全性。

13.What is responder chain?說說響應(yīng)鏈
答案: 事件響應(yīng)鏈。包括點擊事件,畫面刷新事件等。在視圖棧內(nèi)從上至下,或者從下之上傳播。可以說點事件的分發(fā),傳遞以及處理。具體可以去看下touch事件這塊。因為問的太抽象化了嚴重懷疑題目出到越后面就越籠統(tǒng)。

14.Difference between frame and bounds?frame和bounds有什么不同?
答案:frame指的是:該view在父view坐標系統(tǒng)中的位置和大小。(參照點是父親的坐標系統(tǒng))bounds指的是:該view在本身坐標系統(tǒng)中 的位置和大小。(參照點是本身坐標系統(tǒng))

15.Difference between method and selector?方法和選擇器有何不同?
答案:selector是一個方法的名字,method是一個組合體,包含了名字和實現(xiàn).詳情可以看apple文檔。

16.Is there any garbage collection mechanism in Objective C.?OBC的垃圾回收機制?
答案: OBC2.0有Garbage collection,但是iOS平臺不提供。一般我們了解的objective-c對于內(nèi)存管理都是手動操作的,但是也有自動釋放池。但是差了大部分資料,貌似不要和arc機制搞混就好了。求更多~~

17.NSOperation queue?
答案:存放NSOperation的集合類。操作和操作隊列,基本可以看成java中的線程和線程池的概念。用于處理ios多線程開發(fā)的問題。網(wǎng)上部分資料提到一點是,雖然是queue,但是卻并不是帶有隊列的概念,放入的操作并非是按照嚴格的先進現(xiàn)出。這邊又有個疑點是,對于隊列來說,先進先出的概念是Afunc添加進隊列,Bfunc緊跟著也進入隊列,Afunc先執(zhí)行這個是必然的,但是Bfunc是等Afunc完全操作完以后,B才開始啟動并且執(zhí)行,因此隊列的概念離亂上有點違背了多線程處理這個概念。但是轉(zhuǎn)念一想其實可以參考銀行的取票和叫號系統(tǒng)。因此對于A比B先排隊取票但是B率先執(zhí)行完操作,我們亦然可以感性認為這還是一個隊列。但是后來看到一票關(guān)于這操作隊列話題的文章,其中有一句提到“因為兩個操作提交的時間間隔很近,線程池中的線程,誰先啟動是不定的。”瞬間覺得這個queue名字有點忽悠人了,還不如pool~綜合一點,我們知道他可以比較大的用處在于可以幫組多線程編程就好了。

18.What is lazy loading?
答案:懶漢模式,只在用到的時候才去初始化。也可以理解成延時加載。我覺得最好也最簡單的一個列子就是tableView中圖片的加載顯示了。一個延時載,避免內(nèi)存過高,一個異步加載,避免線程堵塞。

19.Can we use two tableview controllers on one viewcontroller?是否在一個視圖控制器中嵌入兩個tableview控制器?
答案:一個視圖控制只提供了一個View視圖,理論上一個tableViewController也不能放吧,只能說可以嵌入一個tableview視圖。當(dāng)然,題目本身也有歧義,如果不是我們定性思維認為的UIViewController,而是宏觀的表示視圖控制者,那我們倒是可以把其看成一個視圖控制者,它可以控制多個視圖控制器,比如TabbarController那樣的感覺。

20.Can we use one tableview with two different datasources? How you will achieve this?一個tableView是否可以關(guān)聯(lián)兩個不同的數(shù)據(jù)源?你會怎么處理?
答案:首先我們從代碼來看,數(shù)據(jù)源如何關(guān)聯(lián)上的,其實是在數(shù)據(jù)源關(guān)聯(lián)的代理方法里實現(xiàn)的。因此我們并不關(guān)心如何去關(guān)聯(lián)他,他怎么關(guān)聯(lián)上,方法只是讓我返回根據(jù)自己的需要去設(shè)置如相關(guān)的數(shù)據(jù)源。因此,我覺得可以設(shè)置多個數(shù)據(jù)源啊,但是有個問題是,你這是想干嘛呢?想讓列表如何顯示,不同的數(shù)據(jù)源分區(qū)塊顯示?

21.Object-c的類可以多重繼承么?可以實現(xiàn)多個接口么?重寫一個類的方式用繼承好還是分類好?為什么?
Objective-c只支持單繼承,如果要實現(xiàn)多繼承的話,可以通過類別和協(xié)議的方式來實現(xiàn),cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用protocol 委托代理 來實現(xiàn)的。

22.#import 跟#include 又什么區(qū)別 #import<> 跟 #import""又什么區(qū)別?
答案:@class一般用于頭文件中需要聲明該類的某個實例變量的時候用到,在m文 件中還是需要使用#import而#import比起#include的好處就是不會引起交叉編譯。

23.類變量的@protected ,@private,@public,@package聲明各有什么含義?

24.id 聲明的對象有什么特性?
答案:id是個很重要的類型,是個可以指向任何類型的指針或者可以理解為指向任何未知類型的指針。

25.MVC是什么?有什么特性?為什么在iPhone上被廣泛運用?
答案:MVC設(shè)計模式考慮三種對象:模型對象、視圖對象、和控制器對象。模型對象代表 特別的知識和專業(yè)技能,它們負責(zé)保有應(yīng)用程序的數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯。視圖對象知道如何顯示應(yīng)用程序的模型數(shù)據(jù),而且可能允許用戶對其進行編輯。控制 器對象是應(yīng)用程序的視圖對象和模型對象之間的協(xié)調(diào)者。

26.對于語句NSString* testObject = [[NSData alloc] init];testObject 在編譯時和運行時分別是什么類型的對象?

27.什么是安全釋放?

28.為什么有些4.0獨有的objective-c 函數(shù)在3.1上運行時會報錯.而4.0獨有的類在3.1上分配內(nèi)存時不會報錯?分配的結(jié)果是什么?

29.為什么4.0獨有的c函數(shù)在3.1的機器上運行不會報錯(在沒有調(diào)用的情況下?)而4.0獨有的類名在3.1的機器上一運行就報錯?

30.異常exception 怎么捕獲?不同的CPU結(jié)構(gòu)上開銷怎樣?C中又什么類似的方法?

31.property中屬性retain,copy,assgin的含義分別是什么?有什么區(qū)別?將其轉(zhuǎn)換成get/set方法怎么做?有什么注意事項?

32.委托是什么?委托的property聲明用什么屬性?為什么?

34.Cocoa中有虛基類的概念么?怎么簡潔的實現(xiàn)?

35.自動釋放池跟GC(垃圾回收)有什么區(qū)別?iPhone上有GC么?[pool release] 和[pool drain]有什么區(qū)別?
iPhone上沒有GC。iPhone開發(fā)的時候沒有垃圾回收機制。
在垃圾回收環(huán)境中,release是一個空操作。因此,NSAutoreleasePool提供了drain方法,在引用計數(shù)環(huán)境中,該方法的作用等同于調(diào)用release,但在垃圾回收環(huán)境中,它會觸發(fā)垃圾回收(如果自上次垃圾回收以來分配的內(nèi)存大于當(dāng)前的閾值)。因此,在通常情況下,您應(yīng)該使用drain而不是release來銷毀自動釋放池。

for(int index = 0; index < 20; index ++){
NSString *tempStr = @”tempStr”;
NSLog(tempStr);
NSNumber *tempNumber = [NSNumber numberWithInt:2];
NSLog(tempNumber);
}
這段代碼有什么問題.?會不會造成內(nèi)存泄露(多線程)?在內(nèi)存緊張的設(shè)備上做大循環(huán)時自動釋放池是寫在循環(huán)內(nèi)好還是循環(huán)外好?為什么?

37.內(nèi)存管理的幾條原則時什么?按照默認法則.那些關(guān)鍵字生成的對象需要手動釋放?在和property結(jié)合的時候怎樣有效的避免內(nèi)存泄露?

38.在一個對象釋放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove這個對象可能會出現(xiàn)什么問題?

39.怎樣實現(xiàn)一個 singleton的類.給出思路。

40.什么是序列化或者Acrchiving,可以用來做什么,怎樣與copy結(jié)合,原理是什么?.

  1. 線程與進程的區(qū)別和聯(lián)系?
    答案: 進程和線程都是由操作系統(tǒng)所體會的程序運行的基本 單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。
    程和線程的主要差別在于它們是不同的操作系統(tǒng)資源 管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變 量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一 些。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進程。

42.在iphone上有兩件事情要做,請問是在一個線程里按順序做效率高還是兩個線程里做效率高?為什么?

43.runloop是什么?在主線程中的某個函數(shù)里調(diào)用了異步函數(shù),怎么樣block當(dāng)前線程,且還能響應(yīng)當(dāng)前線程的timer事件,touch事件等.

44.ios平臺怎么做數(shù)據(jù)的持久化?coredata和sqlite有無必然聯(lián)系?coredata是一個關(guān)系型數(shù)據(jù)庫嗎?
iOS中可以有四種持久化數(shù)據(jù)的方式: 屬性列表、對象歸檔、SQLite3和Core Data;core data可以使你以圖形界面的方式快速的定義app的數(shù)據(jù)模型,同時在你的代碼中容易獲取到它。core data提供了基礎(chǔ)結(jié)構(gòu)去處理常用的功能,例如保存,恢復(fù),撤銷和重做,允許你在app中繼續(xù)創(chuàng)建新的任務(wù)。在使用core data的時候,你不用安裝額外的數(shù)據(jù)庫系統(tǒng),因為core data使用內(nèi)置的sqlite數(shù)據(jù)庫。core data將你app的模型層放入到一組定義在內(nèi)存中的數(shù)據(jù)對象。core data會追蹤這些對象的改變,同時可以根據(jù)需要做相反的改變,例如用戶執(zhí)行撤銷命令。當(dāng)core data在對你app數(shù)據(jù)的改變進行保存的時候,core data會把這些數(shù)據(jù)歸檔,并永久性保存。
mac os x中sqlite庫,它是一個輕量級功能強大的關(guān)系數(shù)據(jù)引擎,也很容易嵌入到應(yīng)用程序。可以在多個平臺使用,sqlite是一個輕量級的嵌入式sql數(shù)據(jù)庫編程。與core data框架不同的是,sqlite是使用程序式的,sql的主要的API來直接操作數(shù)據(jù)表。
Core Data不是一個關(guān)系型數(shù)據(jù)庫,也不是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。雖然Core Dta支持SQLite作為一種存儲類型,但它不能使用任意的SQLite數(shù)據(jù)庫。Core Data在使用的過程種自己創(chuàng)建這個數(shù)據(jù)庫。Core Data支持對一、對多的關(guān)系。

45.闡述一個nil對象從interface bulider產(chǎn)生,到載入程序運行空間,最后被釋放時所經(jīng)歷的生命周期.

完整文檔的免費下載地址:http://download.csdn.net/detail/weasleyqi/4733438

46.notification是同步還是異步? kvo是同步還是異步?notification是全進程空間的通知嗎?kvo呢?

47.kvc是什么?kvo是什么?有什么特性?

48.響應(yīng)者鏈是什么?

49.unix上進程怎么通信?

UNIX主要支持三種通信方式:

  1. 基本通信:主要用來協(xié)調(diào)進程間的同步和互斥

(1)鎖文件通信

 通信的雙方通過查找特定目錄下特定類型的文件(稱鎖文件)來完成進程間  對臨界資源訪問時的互斥;例如進程p1訪問一個臨界資源,首先查看是否有一個特定類型文件,若有,則等待一段時間再查找鎖文件。

(2)記錄鎖文件

  1. 管道通信:適應(yīng)大批量的數(shù)據(jù)傳遞

  2. IPC :適應(yīng)大批量的數(shù)據(jù)傳遞

50.timer的間隔周期準嗎?為什么?怎樣實現(xiàn)一個精準的timer?

51.UIscrollVew用到了什么設(shè)計模式?還能再foundation庫中找到類似的嗎?(答案眾多,不知道哪個是對的~~)

模板(Template)模式,所有datasource和delegate接口都是模板模式的典型應(yīng)用,

組合模式composition,所有的containerview都用了這個模式

觀察者模式observer,所有的UIResponder都用了這個模式。

52如果要開發(fā)一個類似eclipse的軟件,支持插件結(jié)構(gòu)。且開放給第三方開發(fā)。你會怎樣去設(shè)計它?(大概思路)

  1. main()

{

int a[5]={1,2,3,4,5};

int *ptr=(int *)(&a+1);

printf("%d,%d",(a+1),(ptr-1));

}

答:2,5

*(a+1)就是a[1],*(ptr-1)就是a[4],執(zhí)行結(jié)果是2.5,&a+1不是首地址+1,系統(tǒng)會認為加一個a數(shù)組的偏 移,是偏移了一個數(shù)組的大小(本例是5個int,int *ptr=(int *)(&a+1);則ptr實際 是&(a[5]),也就是a+5原因如下:

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

  1. 以下為Windows NT下的32位C++程序,請計算sizeof的值voidFunc ( char str[100] ) { sizeof( str ) =? } void *p = malloc( 100 ); sizeof ( p ) = ?

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

55.- (void)*getNSString(const NSString *inputString)

{ inputString =@"This is a main test\n";

 return ;}

-main(void)

{NSString *a=@"Main";

NSString *aString = [NSStringstringWithString:@"%@",getNSString(a)];

NSLog(@"%@\n", aString);}

最后問輸出的字符串:NULL,output在 函數(shù)返回后,內(nèi)存已經(jīng)被釋放。

56.列舉幾種進程的同步機制,并比較其優(yōu)缺點。

答案: 原子操作信號量機制 自旋鎖 管程,會合,分布式系統(tǒng)

進程之間通信的途徑

答案:共享存儲系統(tǒng)消息傳遞系統(tǒng)管道:以文件系統(tǒng)為基礎(chǔ)

進程死鎖的原因

答案:資源競爭及進程推進順序非法

死鎖的4個必要條 件

答案:互斥、請求保持、不可剝奪、環(huán)路

死鎖的處理

答案:鴕鳥策略、預(yù)防策略、避免策略、檢測與解除死鎖

57.堆和棧的區(qū)別

管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產(chǎn)生memory leak。

申請大小:棧:在Windows下,棧是向低地址擴展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數(shù)),如果申請的空間超過棧的剩余空間時,將提示overflow。因此,能從棧獲得的空間較小。堆:堆是向高地址擴展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統(tǒng)中有效的虛擬內(nèi)存。由此可見,堆獲得的空間比較靈活,也比較大。

碎片問題:對于堆來講,頻繁的new/delete勢必會造成內(nèi)存空間的不連續(xù),從而造成大量的碎片,使程序效率降低。對于棧來講,則不會存在這個 問題,因為棧是先進后出的隊列,他們是如此的一一對應(yīng),以至于永遠都不可能有一個內(nèi)存塊從棧中間彈出

分配方式:堆都是動態(tài)分配的,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配。靜態(tài)分配是編譯器完成的,比如局部變量的分配。動態(tài)分配由alloca函數(shù)進行分配,但是棧的動態(tài)分配和堆是不同的,他的動態(tài)分配是由編譯器進行釋放,無需我們手工實現(xiàn)。

分配效率:棧是機器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執(zhí)行,這就決定了棧的效率比較高。堆則是C/C++函數(shù)庫提供的,它的機制是很復(fù)雜的。

58.什么是鍵-值,鍵路徑是什么?

模型的性質(zhì)是通過一個簡單的鍵(通常是個字符串)來指定的。視圖和控制器通過鍵來查找相應(yīng)的屬性值。在一個給定的實體中,同一個屬性的所有值具有相同的數(shù)據(jù)類型。鍵-值編碼技術(shù)用于進行這樣的查找—它是一種間接訪問對象屬性的機制。

鍵路徑是一個由用點作分隔符的鍵組成的字符串,用于指定一個連接在一起的對象性質(zhì)序列。第一個鍵的性質(zhì)是由先前的性質(zhì)決定的,接下來每個鍵的值也是相對于其前面的性質(zhì)。鍵路徑使您可以以獨立于模型實現(xiàn)的方式指定相關(guān) 對象的性質(zhì)。通過鍵路徑,您可以指定對象圖中的一個任意深度的路徑,使其指向相關(guān)對象的特定屬性。

59.c和obj-c如何混用

1)obj-c的編譯器處理后綴為m的文件時,可以識別obj-c和c的代碼,處理mm文件可以識別obj-c,c,c++代碼,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現(xiàn)obj- c的代碼,因為cpp只是cpp2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問題3)在cpp中混用obj- c其實就是使用obj-c編寫的模塊是我們想要的。如果模塊以類實現(xiàn),那么要按照cpp class的標準寫類的定義,頭文件中不能出現(xiàn)obj-c的東西,包括#import cocoa的。實現(xiàn)文件中,即類的實現(xiàn)代碼中可以使用obj-c的東西,可以import,只是后綴是mm。如果模塊以函數(shù)實現(xiàn),那么頭文件要按 c的格式聲明函數(shù),實現(xiàn)文件中,c++函數(shù)內(nèi)部可以用obj-c,但后綴還是mm或m。總結(jié):只要cpp文件和cpp include的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關(guān)鍵是使用接口,而不能直接使用實現(xiàn)代碼,實際上cpp混用的是 obj-c編譯后的o文件,這個東西其實是無差別的,所以可以用。obj-c的編譯器支持cpp.

60.目標-動作機制

目標是動作消息的接收者。一個控件,或者更為常見的是它的單元,以插座變量(參見"插座變量"部分)的形式保有其動作消息的目標。

動作是控件發(fā)送給目標的消息,或者從目標的角度看,它是目標為了響應(yīng)動作而實現(xiàn)的方法。

程序需要某些機制來進行事件和指令的翻譯。這個機制就是目標-動作機制。

61.cocoatouch框架

iPhoneOS 應(yīng)用程序的基礎(chǔ)Cocoa Touch 框架重用了許多 Mac 系統(tǒng)的成熟模式,但是它更多地專注于觸摸的接口和優(yōu)化。UIKit 為您提供了在 iPhone OS 上實現(xiàn)圖形,事件驅(qū)動程序的基本工具,其建立在和 Mac OS X 中一樣的 Foundation 框架上,包括文件處理,網(wǎng)絡(luò),字符串操作等。

CocoaTouch 具有和 iPhone 用戶接口一致的特殊設(shè)計。有了 UIKit,您可以使用 iPhone OS 上的獨特的圖形接口控件,按鈕,以及全屏視圖的功能,您還可以使用加速儀和多點觸摸手勢來控制您的應(yīng)用。

各色俱全的框架 除了UIKit 外,Cocoa Touch 包含了創(chuàng)建世界一流iPhone 應(yīng)用程序需要的所有框架,從三維圖形,到專業(yè)音效,甚至提供設(shè)備訪問 API 以控制攝像頭,或通過 GPS 獲知當(dāng)前位置。Cocoa Touch 既包含只需要幾行代碼就可以完成全部任務(wù)的強大的 Objective-C 框架,也在需要時提供基礎(chǔ)的 C 語言 API 來直接訪問系統(tǒng)。這些框架包括:

CoreAnimation

通過 CoreAnimation,您就可以通過一個基于組合獨立圖層的簡單的編程模型來創(chuàng)建豐富的用戶體驗。

CoreAudio

CoreAudio 是播放,處理和錄制音頻的專業(yè)技術(shù),能夠輕松為您的應(yīng)用程序添加強大的音頻功能。

CoreData

提供了一個面向?qū)ο蟮臄?shù)據(jù)管理解決方案,它易于使用和理解,甚至可處理任何應(yīng)用或大或小的數(shù)據(jù)模型。

功能列表:框架分類

下面是 CocoaTouch 中一小部分可用的框架:

? 音頻和視頻

? Core Audio

? OpenAL

? Media Library

? AV Foundation

? 數(shù)據(jù)管理

? Core Data

? SQLite

? 圖形和動畫

? Core Animation

? OpenGL ES

? Quartz 2D

? 網(wǎng)絡(luò)/li>

? Bonjour

? WebKit

? BSD Sockets

? 用戶應(yīng)用

? Address Book

? Core Location

? Map Kit

? Store Kit

62.objc的內(nèi)存管理

如果您通過分配和初始化(比如[[MyClass alloc] init])的方式來創(chuàng)建對象,您就擁有這個對象,需要負責(zé)該對象的釋放。這個規(guī)則在使用NSObject的便利方法new 時也同樣適用.

如果您拷貝一個對象,您也擁有拷貝得到的對象,需要負責(zé)該對象的釋放.

如果您保持一個對象,您就部分擁有這個對象,需要在不再使用時釋放該對象。

如果您從其它對象那里接收到一個對象,則您不擁有該對象,也不應(yīng)該釋放它(這個規(guī)則有少數(shù)的例外,在參考文檔中有顯式的說明)。

63.自動釋放池是什么,如何工作

當(dāng)您向一個對象發(fā)送一個autorelease消息時,Cocoa就會將該對 象的一個引用放入到最新的自動釋放池。它仍然是個正當(dāng)?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時,自動釋放池就會被釋放,池中的所有對象也就被釋放。

  1. ojc-c 是通過一種"referringcounting"(引用計數(shù))的方式來管理內(nèi)存的, 對象在開始分配內(nèi)存(alloc)的時候引用計數(shù)為一,以后每當(dāng)碰到有copy,retain的時候引用計數(shù)都會加一, 每當(dāng)碰到release和autorelease的時候引用計數(shù)就會減一,如果此對象的計數(shù)變?yōu)榱?, 就會被系統(tǒng)銷毀.2. NSAutoreleasePool 就是用來做引用計數(shù)的管理工作的,這個東西一般不用你管的.3. autorelease和release沒什么區(qū)別,只是引用計數(shù)減一的時機不同而已,autorelease會在對象的使用真正結(jié)束的時候才做引用計數(shù)減一.

64.類工廠方法是什么

類工廠方法的實現(xiàn)是為了向客戶提供方便,它們將分配和初始化合在一個步驟中, 返回被創(chuàng)建的對象,并進行自動釋放處理。這些方法的形式是+ (type)className...(其中 className不包括任何前綴)。

工廠方法可能不僅僅為了方便使用。它們不但可以將分配和初始化合在一起,還可以為初始化過程提供對象的分配信息。

類工廠方法的另一個目的是使類(比如NSWorkspace)提供單件實例。雖 然init...方法可以確認一個類在每次程序運行過程只存在一個實例,但它需要首先分配一個“生的”實例,然后還必須釋放該實例。工廠 方法則可以避免為可能沒有用的對象盲目分配內(nèi)存。

65.單件實例是什么

Foundation和Application Kit 框架中的一些類只允許創(chuàng)建單件對象,即這些類在當(dāng)前進程中的唯一實例。舉例來說,NSFileManager和NSWorkspace 類在使用時都是基于進程進行單件對象的實例化。當(dāng)向這些類請求實例的時候,它們會向您傳遞單一實例的一個引用,如果該實例還不存在,則首先進行實例的分配和初始化。 單件對象充當(dāng)控制中心的角色,負責(zé)指引或協(xié)調(diào)類的各種服務(wù)。如果類在概念上只有一個實例(比如NSWorkspace),就應(yīng)該產(chǎn)生一個單件實例,而不是多個實例;如果將來某一天可能有多個實例,您可以使用單件實例機制,而不是工廠方法或函數(shù)。

66.動態(tài)綁定—在運行時確定要調(diào)用的方法

動態(tài)綁定將調(diào)用方法的確定也推遲到運行時。在編譯時,方法的調(diào)用并不和代碼綁定在一起,只有在消實發(fā)送出來之后,才確定被調(diào)用的代碼。通過動態(tài)類型和動態(tài)綁定技術(shù),您的代碼每次執(zhí)行都可以得到不同的結(jié)果。運行時因子負責(zé)確定消息的接 收者和被調(diào)用的方法。運行時的消息分發(fā)機制為動態(tài)綁定提供支持。當(dāng)您向一個動態(tài)類型確定了的對象發(fā)送消息時,運行環(huán)境系統(tǒng)會通過接收者的isa指針定位對象的類,并以此為起點確定被調(diào)用的方法,方法和消息是動態(tài)綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動獲取動態(tài)綁定的好處。您在每次發(fā)送消息時,

特別是當(dāng)消息的接收者是動態(tài)類型已經(jīng)確定的對象時,動態(tài)綁定就會例行而 透明地發(fā)生。

67.obj-c的優(yōu)缺點

objc優(yōu)點: 1)Cateogies 2) Posing 3) 動態(tài)識別 4) 指標計算 5)彈性訊息傳遞 6) 不是一個過度復(fù)雜的 C 衍生語言 7) Objective-C 與 C++ 可混合編程

缺點: 1) 不支援命名空間 2) 不支持運算符重載

3) 不支持多重繼承

4) 使用動態(tài)運行時類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。

68.readwrite,readonly,assign,retain,copy,nonatomic 屬性的作用?

@property是 一個屬性訪問聲明,擴號內(nèi)支持以下幾個屬性:1,getter=getterName,setter=setterName,設(shè)置setter與 getter的方法名2,readwrite,readonly,設(shè)置可供訪問級別2,assign,setter方法直接賦值,不進行 任何retain操作,為了解決原類型與環(huán)循引用問題3,retain,setter方法對參數(shù)進行release舊值再retain新值,所有 實現(xiàn)都是這個順序(CC上有相關(guān)資料)4,copy,setter方法進行Copy操作,與retain處理流程一樣,先舊值release,再 Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。5,nonatomic,非原子性訪問,不加同步, 多線程并發(fā)訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務(wù)訪問。鎖被加到所屬對象實例級(我是這么理解的…)。

69.ViewController的 didReceiveMemoryWarning 是在什么時候被調(diào)用的?(87題)

70.談?wù)勀銓RC 的認識和理解?

  1. ObjC中,與alloc語義相反的方法是dealloc還是release?與retain語義相反的方法是dealloc還是release,為什么?需要與alloc配對使用的方法是dealloc還是release,為什么?

alloc與dealloc語意相反,alloc是創(chuàng)建變量,dealloc是釋放變量。 retain 對應(yīng)release,retain 保留一個對象。調(diào)用之后,變量的計數(shù)加1。或許不是很明顯,在這有例為證:

  • (void)setName : (NSString*) name {

    [name retain];

    [myname release];

    myname = name; }

我們來解釋一下:設(shè)想,用戶在調(diào)用這個函數(shù)的時候,他注意了內(nèi)存的管理,所以他小心的寫了如下代碼:

NSString* newname = [[NSString alloc] initWithString: @"John"];

[aClasssetName: newname];

[newnamerelease];

我們來看一看newname的計數(shù)是怎么變化的。首先,它被alloc,count = 1; 然后,在setName中,它被retain,count = 2; 最后,用戶自己釋放newname,count= 1,myname指向了newname。這也解釋了為什么需要調(diào)用[myname release]。我們需要在給myname賦新值的時候,釋放掉以前老的變量。retain 之后直接dealloc對象計數(shù)器沒有釋放。alloc 需要與release配對使用,因為alloc 這個函數(shù)調(diào)用之后,變量的計數(shù)加1。所以在調(diào)用alloc 之后,一定要調(diào)用對應(yīng)的release。另外,在release一個變量之后,他的值仍然有效,所以最好是后面緊接著再var = nil。

  1. 在一個對象的方法里面:

self.name = “object”;

name =”object”

有什么不同?

  1. 這段代碼有什么問題:

@implementation Person

  • (void)setAge:(int)newAge {

self.age = newAge;

}

@end

  1. 什么是retaincount?
  1. 以下每行代碼執(zhí)行后,person對象的retain count分別是多少

Person *person = [[Person alloc] init];

[person retain];

[person release];

[person release];

  1. 為什么很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain的?
  1. 定義屬性時,什么情況使用copy,assign,和retain?

assign用于簡單數(shù)據(jù)類型,如NSInteger,double,bool,retain和copy用戶對象,copy用于當(dāng) a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再調(diào)用b會crash,如果用copy 的方式,a和b各自有自己的內(nèi)存,就可以解決這個問題。retain 會使計數(shù)器加一,也可以解決assign的問題。另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多線程環(huán)境下,原子操作是必要的,否則有可能引起錯誤的結(jié)果。加了atomic,setter函數(shù)會變成下面這樣:

if(property != newValue) { [propertyrelease]; property = [newValueretain]; }

  1. autorelease的對象是在什么時候被release的?

答:autorelease實際上只是把對release的調(diào)用延遲了,對于每一個Autorelease,系統(tǒng)只是把該Object放入了當(dāng)前的Autoreleasepool中,當(dāng)該pool被釋放時,該pool中的所有Object會被調(diào)用Release。對于每一個Runloop,系統(tǒng)會隱式創(chuàng)建一個Autoreleasepool,這樣所有的releasepool會構(gòu)成一個象CallStack一樣的一個棧式結(jié)構(gòu),在每一個Runloop結(jié)束時,當(dāng)前棧頂?shù)腁utoreleasepool會被銷毀,這樣這個pool里的每個Object(就是autorelease的對象)會被release。那什么是一個Runloop呢?一個UI事件,Timer call,delegate call, 都會是一個新的Runloop。那什么是一個Runloop呢?一個UI事件,Timer call,delegate call, 都會是一個新的Runloop。

  1. 這段代碼有什么問題,如何修改

for (int i = 0; i < someLargeNumber; i++)

{

NSString *string = @”Abc”;

string = [string lowercaseString];

string = [stringstringByAppendingString:@"xyz"];

NSLog(@“%@”, string);

}
由于文章太長其余看下篇:http://www.lxweimin.com/p/26da87d89031

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內(nèi)容

  • 注:此文章來源:Job_Yang 的簡書 1. Object-c的類可以多重繼承么?可以實現(xiàn)多個接口么?Categ...
    廣益散人閱讀 1,360評論 0 13
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,197評論 30 471
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,352評論 0 6
  • Object-c的類可以多重繼承么?可以實現(xiàn)多個接口么?Category是什么?重寫一個類的方式用繼承好還是分類好...
    small_Sun閱讀 746評論 0 0
  • 1.穿著不喜歡的衣服概率很低,因為不喜歡,所以不買。 2.簡單休閑,偏修身的款。 3.日常休閑,以舒適為主。 4....
    小蘇_蘇阿胖閱讀 164評論 0 0