文中的問題多收集整理自網絡,不保證100%準確,還望斟酌采納。
答案:
1)改進了 Siri
基于日期、位置和相簿名稱來搜索個人照片和視頻
要求 Siri 來提醒您在 Safari、“郵件”、“備忘錄”和“信息”等應用中看到的有關內容
提供大眾公交路線
2)增強 Spotlight 搜索功能
獲取體育比分、天氣狀況和股票價格
執行簡單的數學計算和單位換算
在聯系人的搜索結果中發送信息、撥打電話和 FaceTime 通話
3)新增 ipad 功能
4)Slide Over
不用離開正在使用的應用即可快速使用另一款應用
在 Slide Over 應用之間輕松切換
支持 Apple 應用和已啟用的第三方應用
5)Split View
可同時查看兩個應用并與之互動
能夠調整視圖,讓兩個應用大小相同,或一大一小
支持 Apple 應用和已啟用的第三方應用
6)新增畫中畫功能
一邊使用您喜愛的應用一邊繼續觀看視頻
支持 Safari 視頻、FaceTime、視頻和播客及已啟用的第三方應用
7)改進了 QuickType
利用 Multi-Touch 手勢,在 iPad 上選擇文本更為輕松
在 iPad 上利用快捷工具欄來快速訪問文本編輯工具
支持硬件鍵盤快捷鍵
支持所有 Unicode 旗幟表情符號
8)改進了“地圖”
支持特選大城市中的大眾公交路線、車站進出站口信息、時刻安排和路線
根據諸如食物、飲料、購物和娛樂之類的類別來瀏覽您附近的地點
在加盟零售方的地點卡上顯示該處是否支持 Apple Pay
地點卡包括維基百科上關于地標和城市的信息
9)重新設計了“備忘錄”應用
用內建相機或從“照片圖庫”將照片來添加到您的備忘錄中
創建實用的核對清單,輕點一下即可勾選已完成的項目
僅用單指速繪,即可記下閃現的想法
利用其他應用中的“共享”菜單直接將感興趣的項目存儲到“備忘錄”中
10)全新的 News 新聞應用
閱讀喜愛的報紙、雜志、博客,或從一百萬多個主題中選讀
精美的設計排版、布局、圖庫、視頻、動畫及更多內容
在“為你推薦”中瀏覽根據您的興趣愛好挑選出來的文章。在“探索”中查找推薦的頻道和主題。您閱讀的內容越多,News 新聞就越
個性化輕松與朋友共享文章或將文章存儲起來稍后閱讀-您甚至可以離線閱讀
11)改進了“郵件”
搜索功能可根據發件人、收件人、主題或選項組合來過濾搜索結果,幫您快速找到要尋找的內容
支持“標記”功能,讓您無需離開“郵件”即可給圖像或 PDF 附件添加文本、形狀,甚至簽名等注釋,并發回郵件
輕松存儲收到的附件,或者在編寫新郵件時添加來自 iCloud Drive 或其他文稿提供者的文件
12)改進了 Apple Pay 和 Wallet
支持 Discover 卡
支持回饋卡、商店信用卡和借記卡
若要加速結賬,您可以在鎖屏連點兩下主屏幕按鈕,并將手指放在 Touch ID 上來準備付款
13)新建 iCloud Drive 應用
按照日期、名稱或您在 Mac 上添加的標記來輕松搜索文件,或者瀏覽新 iCloud Drive
在兼容的應用中打開文件,或者與您選擇的對象共享
整理文件夾和文件
在“設置”> iCloud > iCloud Drive 中獲取 iCloud Drive 應用,然后選擇“在主屏幕上顯示”
14)改進了 CarPlay
回放音頻留言,聽取留言者自己的聲音
完全支持車內旋鈕控制,您可以傾斜或旋轉來滾動瀏覽列表或者平移查看“地圖”
支持汽車制造商的 CarPlay 應用
15)延長了電池使用壽命
在需要充電前增加了最多一小時的可用時間
檢測屏幕朝下的狀態,在不用時關閉顯示器
低電量模式下最優化設備性能,可將電池電量延長最多三小時
答案:
1)GET
2)HEAD
3)PUT
4)DELETE
5)POST
6)OPTIONS
答案:
1)m_mainImgView.layer.cornerRadius = 具體數值;
2)m_mainImgView.layer.masksToBounds= YES;
答案:
決定子layer是否被當前layer的邊界剪切,默認是NO
答案:
1. 系統調用app的main函數
2. main函數調用UIapplicationMain.
3. UIApplicationMain創建sharedapplication instance, UIApplication默認的instance.
4. UIApplicationMain讀取Info.plist找到主nib文件,加載nib,把shared applicationinstance設為nib的owner.
5. 通過nib文件,創建app的獨立UIWindows object.
6. 通過nib,實例化了程序的AppDelegate object.
7. app內部啟動結束,application:didFinishLaunchingWith-Options:被設定成 wAppDelegate instance.
8. AppDelegate向UIWindowinstance發makeKeyAndVisible消息, app界面展示給用戶. app準備好接收用戶的操作指令.
答案:
手動管理(MRC) 自動內存管理(ARC)
答案:
OC 本身是沒有多繼承的,但是我們可以通過協議來實現類似C++中的多繼承。
答案:
1. readwrite 是可讀可寫特性;需要生成getter方法和setter方法時
2. readonly 是只讀特性 只會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變
3. assign 是賦值特性,setter方法將傳入參數賦值給實例變量;僅設置變量時;
4. retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;
5. copy 表示賦值特性,setter方法將傳入對象復制一份;需要完全一份新的變量時。
6. nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,
一般使用nonatomic
答案:
編譯時是NSString的類型;運行時是NSData類型的對象
答案:
id 聲明的對象具有運行時的特性,即可以指向任意類型的objcetive-c的對象;
答案:
1. atomic提供多線程安全。是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤
2. non-atomic:在自己管理內存的環境中,解析的訪問器保留并自動釋放返回的值,如果指定了 nonatomic ,
那么訪問器只是簡單地返回這個值。
答案:
category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實現的。
extensions可以認為是一個私有的Category。
答案:
有以下幾種保存機制:
1.通過web服務,保存在服務器上
2.通過NSCoder固化機制,將對象保存在文件中
3.通過SQlite或CoreData保存在文件數據庫中
答案:
objective-c– 類里面的方法只有兩種, 靜態方法和實例方法. 這似乎就不是完整的面向對象了,按照OO的原則就是一個對象
只暴露有用的東西. 如果沒有了私有方法的話,對于一些小范圍的代碼重用就不那么順手了. 在類里面聲名一個私有方法
1 @interface Controller : NSObject { NSString *something; }2 + (void)thisIsAStaticMethod;3 – (void)thisIsAnInstanceMethod;4 @end5 @interface Controller (PRivate) -6 (void)thisIsAPrivateMethod;7 @end
@private可以用來修飾私有變量
在Objective‐C中,所有實例變量默認都是私有的,所有實例方法默認都是公有的
答案:
const意味著”只讀”,下面的聲明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)
第四個意思a是一個指向整型數的常指針(也就是說,指 針指向的整型數是可以修改的,但指針是不可修改的)。最后一個意味
著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。
結論:
關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數為常量是為了告訴了用戶這個參數的應用目的
如果你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用const的程序員很少會留下的
垃圾讓別人來清理的。)通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。合理地使用關鍵字const
可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現。
欲阻止一個變量被改變,可以使用 const 關鍵字。在定義該const 變量時,通常需要對它進行初始化,因為以后就沒有機會再
去改變它了;
2)對指針來說,可以指定指針本身為const,也可以指定指針所指的數據為 const,或二者同時指定為const;
3)在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數內部不能改變其值;
4)對于類的成員函數,若指定其為const 類型,則表明其是一個常函數,不能修改類的成員變量;
5)對于類的成員函數,有時候必須指定其返回值為const 類型,以使得其返回值不為“左值”。
答案:
一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,
優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。
下面是volatile變量的幾個例子:
1) 并行設備的硬件寄存器(如:狀態寄存器)
2) 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)
3)多線程應用中被幾個任務共享的變量
答案:
是的。一個例子是只讀的狀態寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它。
答案:
可以是的。
盡管這種情況并不常見,但它還是可以。一個例子就是:
當一個中斷服務子程序企圖去修改一個指向一個buffer指針的時候。
答案:
1)函數體內 static 變量的作用范圍為該函數體,不同于 auto 變量,該變量的內存只被分配一次,因此其值在下次調用時
仍維持上次的值;
2)在模塊內的 static 全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;
3)在模塊內的 static 函數只可被這一模塊內的其它函數調用,這個函數的使用范圍被限制在聲明它的模塊內;
4)在類中的 static 成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;
5)在類中的 static 成員函數屬于整個類所擁有,這個函數不接收 this 指針,因而只能訪問類的static 成員變量。
答案:
#import是Objective-C導入頭文件的關鍵字,#include是C/C++導入頭文件的關鍵字,使用#import頭文件會自動
只導入一次,不會重復導入,相當于#include和#pragma once;@class告訴編譯器某個類的聲明,當執行時,
才去查看類的實現文件,可以解決頭文件的相互包含;#import<>用來包含系統的頭文件,#import””用來包含用
戶頭文件。
答案:
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性。進程和線程的主要差別
在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,
而線程只是一個進程中的不同執行路 徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就
等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求
同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。
答案:
管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產生memoryleak。
申請大小:
棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統
預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的
余空間時,將提示overflow。因此,能從棧獲得的空間較小。
堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由于系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,
而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,
也比較大。
碎片問題:對于堆來講,頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。對于棧來講,
則不會存在這個問題,因為棧是先進后出的隊列,他們是如此的一一對應,以至于永遠都不可能有一個內存塊從棧中間彈出
分配方式:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部
變量的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們
手工實現。
分配效率:棧是機器系統提供的數據結構,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的
指令執行,這就決定了棧的效率比較高。堆則是C/C++函數庫提供的,它的機制是很復雜的。
答案:
1)當你使用new,alloc和copy方法創建一個對象時,該對象的保留計數器值為1.當你不再使用該對象時,你要負責向該對象發送一條
release或autorelease消息.這樣,該對象將在使用壽命結束時被銷毀.
2)當你通過任何其他方法獲得一個對象時,則假設該對象的保留計數器值為1,而且已經被設置為自動釋放,你不需要執行任何操作來
確保該對象被清理.如果你打算在一段時間內擁有該對象,則需要保留它并確保在操作完成時釋放它.
3)如果你保留了某個對象,你需要(最終)釋放或自動釋放該對象.必須保持retain方法和release方法的使用次數相等.為什么很多
內置的類,如TableViewController的delegate的屬性是assign不是retain。
循環引用
所有的引用計數系統,都存在循環應用的問題。例如下面的引用關系:
1)對象a創建并引用到了對象b.
2)對象b創建并引用到了對象c.
3)對象c創建并引用到了對象b.
這時候b和c的引用計數分別是2和1。當a不再使用b,調用release釋放對b的所有權,因為c還引用了b,所以b的引用計數為1,
b不會被釋放。b不釋放,c的引用計數就是1,c也不會被釋放。從此,b和c永遠留在內存中。這種情況,必須打斷循環引用
通過其他規則來維護引用關系。比如,我們常見的delegate往往是assign方式的屬性而不是retain方式 的屬性,
賦值不會增加引用計數,就是為了防止delegation兩端產生不必要的循環引用。如果一個UITableViewController對象a
通過retain獲取了UITableView對象b的所有權,這個UITableView對象b的delegate又是a,如果這個delegate是retain方式的,
那基本上就沒有機會釋放這兩個對象了。自己在設計使用delegate模式時,也要注意這點。
答案:
assign用于簡單數據類型,如NSInteger,double,bool,
retain和copy用于對象,
copy用于當a指向一個對象,b也想指向同樣的對象的時候,如果用assign,a如果釋放,再調用b會crash,如果用copy 的方式,
a和b各自有自己的內存,就可以解決這個問題。retain 會使計數器加一,也可以解決assign的問題。
另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多線程環境下,原子操作是必要的,
否則有可能引起錯誤的結果。加了atomic,setter函數會變成下面這樣:
if (property != newValue) { [property release]; property = [newValue retain]; }
答案:
引用計數為0時。 autorelease實際上只是把對release的調用延遲了,對于每一個Autorelease,系統只是把該Object放入
了當前的 Autoreleasepool中,當該pool被釋放時,該pool中的所有Object會被調用Release。對于每一個Runloop,
系統會隱式創建一個Autoreleasepool,這樣所有的release pool會構成一個象CallStack一樣的一個棧式結構,
在每一個Runloop結束時,當前棧頂的Autoreleasepool會被銷毀,這樣這 個pool里的每個Object
(就是autorelease的對象)會被release。那什么是一個Runloop呢?一個UI事件,Timercall, delegate call,
都會是一個新的Runloop
答案:
Objective-C 2.0也是有垃圾回收機制的,但是只能在Mac OS X Leopard10.5 以上的版本使用。
答案:
查看UITableView頭文件,會找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells兩個結構。
visiableCells內保存當前顯示的cells,reusableTableCells保存可重 用的cells。
TableView顯示之初,reusableTableCells為空,那么 tableViewdequeueReusableCellWithIdentifier:CellIdentifier返回nil。
開始的cell都是 通過[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]
來創建,而且cellForRowAtIndexPath只是調用最大顯示cell數的 次數。比如:有100條數據,iPhone一屏最多顯示10個cell。
程序最開始顯示TableView的情況是:
1. 用[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]創建10次cell,
并給cell指定同樣的重用標識(當然,可以為不同顯示類型的 cell指定不同的標識)。并且10個cell全部都加入到visiableCells數組,
reusableTableCells為空。
2. 向下拖動tableView,當cell1完全移出屏幕,并且cell11(它也是alloc出來的,原因同上)完全顯示出來的時候。cell11加入到
visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。
3. 接著向下拖動tableView,因為reusableTableCells中已經有值,所以,當需要顯示新的 cell,cellForRowAtIndexPath再次
被調用的候,tableViewdequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。 cell1加入到visiableCells,
cell1移出reusableTableCells;cell2移出 visiableCells,cell2加入到reusableTableCells。之后再需要顯示的Cell就可以
正常重用了。
答案:
由init、loadView、viewDidLoad、viewDidUnload、dealloc的關系說起
1)init方法
在init方法中實例化必要的對象(遵從LazyLoad思想)
init方法中初始化ViewController本身
2)loadView方法
當view需要被展示而它卻是nil時,viewController會調用該方法。不要直接調用該方法。
如果手工維護views,必須重載重寫該方法
如果使用IB維護views,必須不能重載重寫該方法
3)loadView和IB構建view
你在控制器中實現了loadView方法,那么你可能會在應用運行的某個時候被內存管理控制調用。 如果設備內存不足的時候,
view 控制器會收到didReceiveMemoryWarning的消息。默認的實現是檢查當前控制器的view是否在使用。 如果它的view
不在當前正在使用的view hierarchy里面,且你的控制器實現了loadView方法,那么這個view將被release, loadView方法
將被再次調用來創建一個新的view。
4)viewDidLoad方法
viewDidLoad 此方法只有當view從nib文件初始化的時候才被調用。
重載重寫該方法以進一步定制view
在iPhone OS 3.0及之后的版本中,還應該重載重寫viewDidUnload來釋放對view的任何索引
viewDidLoad后調用數據Model
5)viewDidUnload方法
當系統內存吃緊的時候會調用該方法(注:viewController沒有被dealloc)
內存吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內存的唯一方式,但是OS 3.0及以后
viewDidUnload方法是更好的方式在該方法中將所有IBOutlet(無論是property還是實例變量)置為nil
(系統release view時已經將其release掉了)在該方法中釋放其他與view有關的對象、其他在運行時創建
(但非系統必須)的對象、在viewDidLoad中被創建的對象、緩存數據等 release對象后,將對象置為nil(IBOutlet只需要將
其置為nil,系統release view時已經將其release掉了)一般認為viewDidUnload是viewDidLoad的鏡像,因為當view被重新
請求時,viewDidLoad還會重新被執行viewDidUnload中被release的對象必須是很容易被重新創建的對象(比如在
viewDidLoad或其他方法中創建的對象),不要release用戶數據或其他很難被重新創建的對象
6)dealloc方法
viewDidUnload和dealloc方法沒有關聯,dealloc還是繼續做它該做的事情
答案:
當程序接到內存警告時View Controller將會收到這個消息:didReceiveMemoryWarning從iOS3.0開始,不需要重載這個函數,
把釋放內存的代碼放到viewDidUnload中去。這個函數的默認實現是:檢查controller是否可以安全地釋放它的view(這里加粗的
view指的是controller的view屬性),比如view本身沒有superview并且可以被很容易地重建(從nib或者loadView函數)。
如果view可以被釋放,那么這個函數釋放view并調用viewDidUnload。你可以重載這個函數來釋放controller中使用的其他內存。
但要記得調用這個函數的super實現來允許父類(一般是UIVIewController)釋放view。如果你的ViewController保存著
view的子view的引用,那么,在早期的iOS版本中,你應該在這個函數中來釋放這些引用。而在iOS3.0或更高版本中,
你應該在viewDidUnload中釋放這些引用。
答案:
NSOperation NSThread
@sychonized 一般需要做多任務的處理時會用的多線程。
答案:
MVC設計模式考慮三種對象:模型對象、視圖對象、和控制器對象。模型對象代表特別的知識和專業技能,它們負責保有應用程序
的數據和定義操作數據的邏輯。視圖對象知道如何顯示應 用程序的模型數據,而且可能允許用戶對其進行編輯。控制器對象
是應用程序的視圖對象和模型對象之間的協調者。
答案:
delegate針對one-to-one關系,并且reciever可以返回值給sender;
notification 可以針對one-to-one/many/none,reciever無法返回值給sender;
所以,delegate用于sender希望接受到reciever的某個功能反饋值,notification用于通知多個object某個事件。
答案:
當通過KVC調用對象時,比如:[self valueForKey:@”someKey”]時,程序會自動試圖通過幾種不同的方式解析這個調用。
首先查找對象是否帶有 someKey 這個方法,如果沒找到,會繼續查找對象是否帶有someKey這個實例變量(iVar),
如果還沒有找到,程序會繼續試圖調用 -(id)valueForUndefinedKey:這個方法。如果這個方法還是沒有被實現的話,
程序會拋出一個NSUndefinedKeyException異常錯誤。(Key-Value Coding查找方法的時候,不僅僅會查找someKey
這個方法,還會查找getsomeKey這個方法,前面加一個get,或者_someKey以及_getsomeKey這幾種形式。同時,
查找實例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在。)設計valueForUndefinedKey:
方法的主要目的是當你使用-(id)valueForKey方法從對象中請求值時,對象能夠在錯誤發生前,有最后的機會響應這個請求。
答案:
self. 表示對象的屬性 self 表示對象本身
答案:
1)id和void *并非完全一樣。在上面的代碼中,id是指向struct objc_object的一個指針,這個意思基本上是說,id是一個指向任何
一個繼承了Object(或者NSObject)類的對象。需要注意的是id是一個指針,所以你在使用id的時候不需要加星號。
比如id foo=nil定義了一個nil指針,這個指針指向NSObject的一個任意子類。而id *foo=nil則定義了一個指針,這個
指針指向另一個指針,被指向的這個指針指向NSObject的一個子類。
2)nil和C語言的NULL相同,在objc/objc.h中定義。nil表示一個Objctive-C對象,這個對象的指針指向空(沒有東西就是空)。
答案:
1)你初始化(alloc/init)的對象,你需要釋放(release)它。例如:
NSMutableArray aArray = [[NSArray alloc] init];
后,需要
[aArray release];
2)你retain或copy的,你需要釋放它。例如:
[aArray retain]
后,需要
[aArray release];
3)被傳遞(assign)的對象,你需要斟酌的retain和release。例如:
obj2 = [[obj1 someMethod] autorelease];
對象2接收對象1的一個自動釋放的值,或傳遞一個基本數據類型(NSInteger,NSString)時: 你或希望將對象2進行retain,
以防止它在被使用之前就被自動釋放掉。但是在retain后,一定要在適當的時候進行釋放。
答案:
retain值 = 索引計數(ReferenceCounting) NSArray對象會retain(retain值加一)任何數組中的對象。當NSArray被卸載
(dealloc)的時候,所有數組中的對象會被執行一次釋放(retain值減一)。不僅僅是NSArray,任何收集類(CollectionClasses)
都執行類似操作。例如NSDictionary,甚至UINavigationController。Alloc/init建立的對象,索引計數為1。無需將其再次retain
[NSArray array]和[NSDate date]等“方法”建立一個索引計數為1的對象,但是也是一個自動釋放對象所以是本地臨時對象,
那么無所謂了。如果是打算在全Class中使用的變量(iVar),則必須retain它。缺省的類方法返回值都被執行了“自動釋放”方法。
(*如上中的NSArray)在類中的卸載方法“dealloc”中,release所有未被平衡的NS對象。(*所有未被autorelease,
而retain值為1的)
答案:
有時我們需要在一個已經定義好的類中增加一些方法,而不想去重寫該類。比如,當工程已經很大,代碼量比較多,或者類中
已經包住很多方法,已經有其他代碼調用了該類創建對象并使用該類的方法時,可以使用類別對該類擴充新的方法。注意:
類別只能擴充方法,而不能擴充成員變量。
答案:
委托代理(degegate),顧名思義,把某個對象要做的事情委托給別的對象去做。那么別的對象就是這個對象的代理,代替它
來打理要做的事。反映到程序中,首先要明確一個對象的委托 方是哪個對象,委托所做的內容是什么。委托機制是一種設計
模式,在很多語言中都用到的,這只是個通用的思想,網上會有很多關于這方面的介紹。那么在蘋果開發過程中,用到委托的
程序實現思想如下,我主要拿如何在視圖之間傳輸信息做個例子。譬如:在兩個頁面(UIIview視圖對象)實現傳值,
用委托(delegate)可以很好做到!
方法:
1 //類A 2 @interface A:UIView 3 id transparendValueDelegate; 4 @property(nomatic, retain) idtransparendValueDelegate; 5 @end 6 7 @implemtion A 8 @synthesize transparendValueDelegate 9 -(void)Function10 { 11 NSString* value = @"hello";12 //讓代理對象執行transparendValue動作13 [transparendValueDelegate transparendValue:value];14 }15 @end16 17 //類B18 @interface B:UIView19 NSString* value;20 @end21 22 @implemtion B23 -(void)transparendValue:(NSString*)fromValue24 {25 value = fromValue;26 NSLog(@"the value is %@",value); 27 }28 @end29 30 //下面的設置A代理委托對象為B31 //在定義A和B類對象處:32 33 A* a = [[A alloc] init];34 B* b = [[B alloc] init];35 a. transparendValueDelegate = b;//設置對象a代理為對象b
這樣在視圖A和B之間可以通過委托來傳值!
下面這個例子委托有兩類:
1、一個視圖類對象的代理對象為父視圖,子視圖用代理實現讓父視圖顯示別的子視圖
2、同一父視圖下的一個子視圖為另一個子視圖的代理對象,讓另一個子視圖改變自身背景色為給定的顏色
===============================================
規范格式如下:
1 @protocol TransparendValueDelegate; 2 3 @interface A:UIView 4 id< TransparendValueDelegate > m_dTransparendValueDelegate; 5 @property(nomatic, retain) id m_dTransparendValueDelegate; 6 @end 7 //代理協議的聲明 8 @protocol TransparendValueDelegat<NSObject> 9 {10 -(void)transparendValue:(NSString*)fromValue;11 12 }
答案:
frame:該view在父view坐標系統中的位置和大小。(參照點是,父親的坐標系統)
bounds:該view在本地坐標系統中的位置和大小。(參照點是,本地坐標系統)
答案:
這個數量是跟cpu有關的,并發性取決于cpu核數,每個核只能 同時處理一個任務.4核cpu理論上可以并發處理4個任務,
如果按http來算就是4個請求,但是cpu是搶占式資源,所以一般來說并發量是要根據任務的 耗時和cpu的繁忙度來計算4個左右
只是個經驗值你開10個短耗時的任務和幾個長耗時任務的效率是不同的- -..一般來說估算這個量的最大效率估算公示是cpu
核數*2-1,這個公式是當時對集群進行壓測得到的結論.cpu搶占時間跟任務時長…開啟這個數量的 線程可以最大化的榨干cpu
一個道理。cpu不可能都被搶去做connection.iOS是cpu密集型的消耗?。這個大概知道就行了,也不會有人特 別在意吧…
cpu核數*2-1那個是做淘寶的java團隊壓測得到的線程最優數?,放在iOS上也多少適用…一般來說不超過這個量就好,
線程不是起的越多越好,線程數就是…cpu來決定的
答案:
coredata是蘋果提供一套數據保存框架,其基于SQlite
答案:
NSManagedObject是NSObject的子類 ,也是coredata的重要組成部分,它是一個通用的類,實現了
core data 模型層所需的基本功能,用戶可通過子類化NSManagedObject,建立自己的數據模型。
答案:
NSManagedobjectContext對象負責應用和數據庫之間的交互。
答案:
當數組在程序運行時,需要不斷變化的,使用NSMutableArray,當數組在初始化后,便不再改變的,使用NSArray。
需要指出的是,使用NSArray只表明的是該數組在運行 時不發生改變,即不能往NSAarry的數組里新增和刪除元素,
但不表明其數組內的元素的內容不能發生改變。NSArray是線程安全的,NSMutableArray不是線程安全的,
多線程使用到NSMutableArray需要注意。
新聞熱點
疑難解答