1.Objective-C可以實(shí)現(xiàn)多繼承嗎?可以實(shí)現(xiàn)多個(gè)接口嗎粘舟?Category是什么熔脂?重寫(xiě)一個(gè)類(lèi)的方式是用繼承好還是用分類(lèi)好?為什么蓖乘?
2.OC使用協(xié)議實(shí)現(xiàn)多繼承锤悄,可以遵守多個(gè)協(xié)議實(shí)現(xiàn)多接口。category是OC中的類(lèi)別嘉抒,類(lèi)別是用于給一個(gè)現(xiàn)有類(lèi)添加新方法零聚。重寫(xiě)類(lèi)一般采用繼承的方式,分類(lèi)(類(lèi)別)在給以個(gè)類(lèi)添加同名方法后些侍,會(huì)造成原有類(lèi)中方法的實(shí)效隶症,而繼承重寫(xiě)的方法,依然可以在使用父類(lèi)對(duì)象調(diào)用該方法岗宣。
3.定義屬性的時(shí)候蚂会,什么時(shí)候使用retain/copy/assign?寫(xiě)一個(gè)setter方法耗式,用于完成@property(nonatomic,retain) NSString* name;寫(xiě)一個(gè)setter方法胁住,用于完成@property(nonatomic,copy)NSString* name;
retain用于保留對(duì)象的引用計(jì)數(shù),在使用retain聲明的屬性做賦值的時(shí)候刊咳,成員變量指針會(huì)保留被賦值對(duì)象的引用計(jì)數(shù)彪见。
copy聲明的屬性,在使用屬性賦值的時(shí)候會(huì)娱挨,成員指針會(huì)指向新副本余指,這個(gè)副本是一個(gè)不可變副本,不論賦值對(duì)象是不是可變的跷坝。
assign用于基本數(shù)據(jù)類(lèi)型的屬性聲明酵镜,不涉及到內(nèi)存管理的問(wèn)題,也是缺省參數(shù)
retain聲明的屬性的setter方法展開(kāi)
- (void)setName:(NSString*)name
{
if(_name != name)
{
[_namerelease];
_name= [name retain];
}
}
copy聲明的屬性的setter方法展開(kāi)
- (void)setName:(NSString*)name
{
if(_name != name)
{
[_namerelease];
_name= [name copy];
}
}
4.什么時(shí)候使用NSMutableArray/什么時(shí)候使用NSArray
NSMutableArray一般在需要隨時(shí)更改數(shù)組結(jié)構(gòu)的時(shí)候使用
NSArray一般用于保存一些不需要修改邏輯的數(shù)據(jù)
5.實(shí)現(xiàn)字符串“I LOVE CHINA”反串成“CHINA LOVE I”
6. pch文件的作用
.pch表示"precompiled header",這是一個(gè)你工程要用到的來(lái)自于外部框架的頭文件列表柴钻。xcode將編譯這些頭到文件淮韭,這將減少你在選擇Build或Build and Go時(shí)編譯項(xiàng)目的時(shí)間。通常用到的頭文件已經(jīng)自動(dòng)包含了pch贴届,系統(tǒng)編譯每個(gè)cpp文件前靠粪,都會(huì)先include這個(gè)文件足丢。這樣就節(jié)省了添加include的時(shí)間,相當(dāng)于加速編譯
還有就是可以再這里面放入宏庇配,在整個(gè)工程中都可以用
7.怎樣解決重復(fù)編譯
#ifndef _DEBUG
#ifdef USE_MYLIB
................
#endif
8. awakeFromNib與viewDidLoad區(qū)別
awakeFromNib
當(dāng).nib文件被加載的時(shí)候,會(huì)發(fā)送一個(gè)awakeFromNib的消息到.nib文件中的每個(gè)對(duì)象绍些,每個(gè)對(duì)象都可以定義自己的awakeFromNib函數(shù)來(lái)響應(yīng)這個(gè)消息捞慌,執(zhí)行一些必要的操作。也就是說(shuō)通過(guò)nib文件創(chuàng)建view對(duì)象是執(zhí)行awakeFromNib柬批。
viewDidLoad
當(dāng)view對(duì)象被加載到內(nèi)存是就會(huì)執(zhí)行viewDidLoad啸澡,所以不管通過(guò)nib文件還是代碼的方式創(chuàng)建對(duì)象都會(huì)執(zhí)行viewDidLoad。
9. LayoutSubviews何時(shí)會(huì)被調(diào)用
當(dāng)要調(diào)整subViews時(shí)候氮帐,需要重寫(xiě)layoutSubviews方法嗅虏。
1:初始化init方法時(shí)候不會(huì)觸發(fā)。
2:滾動(dòng)UIScrollView時(shí)會(huì)觸發(fā)
3:旋轉(zhuǎn)UIScreen時(shí)會(huì)觸發(fā)
4:當(dāng)改變view的值時(shí)候會(huì)觸發(fā)上沐,前提是frame前后值發(fā)生了變化
5:當(dāng)改變UIview的大小時(shí)候會(huì)觸發(fā)
10. public/private/protected的具體區(qū)別
public公共皮服,加上這個(gè)修飾的類(lèi)或?qū)傩裕梢栽谕粋€(gè)包或者別的包里面訪問(wèn)
private私有的参咙,加上這個(gè)修飾的類(lèi)或?qū)傩粤涔悖荒茉谕?lèi)里訪問(wèn),同包和別的包不能訪問(wèn)
protected保護(hù)蕴侧,加上這個(gè)修飾的類(lèi)或?qū)傩栽裢荒茉陬?lèi)和同包訪問(wèn),別的包不能訪問(wèn)
11. ARC是什么
ARC是iOS 5推出的新功能净宵,全稱(chēng)叫ARC(Automatic Reference Counting)敲才。簡(jiǎn)單地說(shuō),就是代碼中自動(dòng)加入了retain/release择葡,原先需要手動(dòng)添加的用來(lái)處理內(nèi)存管理的引用計(jì)數(shù)的代碼可以自動(dòng)地由編譯器完成了紧武。
該機(jī)能在iOS 5/ Mac OS X 10.7開(kāi)始導(dǎo)入,利用Xcode4.2可以使用該機(jī)能刁岸。簡(jiǎn)單地理解ARC脏里,就是通過(guò)指定的語(yǔ)法,讓編譯器(LLVM
3.0)在編譯代碼時(shí)虹曙,自動(dòng)生成實(shí)例的引用計(jì)數(shù)管理部分代碼迫横。有一點(diǎn),ARC并不是GC酝碳,它只是一種代碼靜態(tài)分析(Static
Analyzer)工具矾踱。
12.寫(xiě)一個(gè)“標(biāo)準(zhǔn)”宏,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的
#define MIN(X,Y)((X)>(Y)?(Y):(X))
13.Objective-c中有多重繼承么疏哗?不是的話有聲明替代方式?
沒(méi)有多繼承呛讲,可以通過(guò)協(xié)議模擬多繼承
14.Objective-c中有私有方法嗎?私有變量呢?
沒(méi)有私有方法贝搁,但可以將方法直接實(shí)現(xiàn)在.m文件中不在.h文件中聲明時(shí)吗氏,外部也不能訪問(wèn)。
有私有變量
15.iPhone OS中有沒(méi)有垃圾回收雷逆?
沒(méi)有
16.常見(jiàn)的object-c的數(shù)據(jù)類(lèi)型有哪些弦讽,和c的基本類(lèi)型有什么區(qū)別
答:常見(jiàn)的object-c的數(shù)據(jù)類(lèi)型有NSInteger、CGFloat膀哲、NSString往产、NSNumber、NSArray某宪、NSData仿村,NSInteger會(huì)根據(jù)系統(tǒng)是32位還是64位來(lái)決定是本身是int還是Long,
CGFloat會(huì)根據(jù)系統(tǒng)是32位還是64位來(lái)決定是本身是float還是double,NSString、NSNumber兴喂、NSArray蔼囊、NSData都是指針類(lèi)型的對(duì)象,在堆中分配空間,而c語(yǔ)言中的char瞻想,[]等都是在棧中分配空間
17.id聲明的對(duì)象有什么特性压真?
id聲明的對(duì)象具有運(yùn)行時(shí)的特性,即可以指向任意類(lèi)型的objcetive-c的對(duì)象蘑险;
18.想nil對(duì)象發(fā)送消息會(huì)發(fā)生什么滴肿?
答:在Objective-C中向nil發(fā)送消息是完全有效的,只是在運(yùn)行時(shí)不會(huì)有任何作用佃迄。
19.什么是block泼差?block實(shí)現(xiàn)原理?
答:block是一個(gè)特殊的OC對(duì)象,它建立在棧上,而不是堆上,這么做一個(gè)是為性能考慮,還有就是方便訪問(wèn)局部變量呵俏。默認(rèn)情況下block使用到的局部變量都會(huì)被復(fù)制,而不是保留堆缘。所以它無(wú)法改變局部變量的值。如果在變量面前加上__block,那么編譯器回去不會(huì)復(fù)制變量,而是去找變量的地址,通過(guò)地址來(lái)訪問(wèn)變量,實(shí)際上就是直接操作變量普碎。另外block是在棧上分配的,所以一旦離開(kāi)作用域,就會(huì)釋放,因此如果你要把快用在別的地方,必須要復(fù)制一份吼肥。block是不能保留的,
retain對(duì)塊沒(méi)有意義。
20.C++和OC麻车,JAVA和OC之間的區(qū)別缀皱?
C++是功能強(qiáng)大,豐富的面向?qū)ο缶幊陶Z(yǔ)言动猬,具有私有啤斗、公有、保護(hù)權(quán)限的三種成員變量和成員方法赁咙,具有私有钮莲、公有免钻、保護(hù)三種繼承方式,具有重寫(xiě)崔拥,重載极舔,虛函數(shù),虛基類(lèi)等多態(tài)方式链瓦,通過(guò)虛基類(lèi)實(shí)現(xiàn)代理回調(diào)姆怪。自定義類(lèi)可以沒(méi)有父類(lèi)。另外具備向量澡绩,模板,友元俺附,重載運(yùn)算符等多種獨(dú)特語(yǔ)法
Obj-C是針對(duì)mac OS和iOS設(shè)備應(yīng)用程序開(kāi)發(fā)的專(zhuān)屬編程語(yǔ)言肥卡,采用動(dòng)態(tài)繼承,消息方法機(jī)制事镣,沒(méi)有真正的重寫(xiě)機(jī)制步鉴,沒(méi)有私有方法,繼承方式為公有璃哟,具備協(xié)議氛琢,類(lèi)別,Block等獨(dú)有的語(yǔ)法随闪,萬(wàn)用父類(lèi)為NSObject
JAVA是老牌的面向?qū)ο笳Z(yǔ)言阳似,編寫(xiě)的程序在JAVA虛擬機(jī)上運(yùn)行,真正實(shí)現(xiàn)了一次編譯到處運(yùn)行铐伴,具有復(fù)雜的內(nèi)存回收機(jī)制撮奏,單繼承模式,接口語(yǔ)法類(lèi)似Obj-C的協(xié)議
21.抽象與接口的區(qū)別当宴?
聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)被叫做抽象類(lèi)(abstract class)畜吊,它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類(lèi),并為該類(lèi)聲明方法户矢,但不能在該類(lèi)中實(shí)現(xiàn)該類(lèi)的情況玲献。不能創(chuàng)建abstract類(lèi)的實(shí)例丝格。然而可以創(chuàng)建一個(gè)變量设联,其類(lèi)型是一個(gè)抽象類(lèi),并讓它指向具體子類(lèi)的一個(gè)實(shí)例醇滥。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法驱证。Abstract類(lèi)的子類(lèi)為它們父類(lèi)中的所有抽象方法提供實(shí)現(xiàn)延窜,否則它們也是抽象類(lèi)為。取而代之抹锄,在子類(lèi)中實(shí)現(xiàn)該方法逆瑞。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現(xiàn)這些方法荠藤。
接口(interface)是抽象類(lèi)的變體。在接口中获高,所有方法都是抽象的哈肖。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的念秧,沒(méi)有一個(gè)有程序體淤井。接口只可以定義static
final成員變量。接口的實(shí)現(xiàn)與子類(lèi)相似摊趾,除了該實(shí)現(xiàn)類(lèi)不能從接口定義中繼承行為币狠。當(dāng)類(lèi)實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法砾层。然后漩绵,它可以在實(shí)現(xiàn)了該接口的類(lèi)的任何對(duì)象上調(diào)用接口的方法。由于有抽象類(lèi)肛炮,它允許使用接口名作為引用變量的類(lèi)型止吐。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類(lèi)型或從接口類(lèi)型轉(zhuǎn)換侨糟,instanceof運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口碍扔。
22.nil與NULL的區(qū)別?
從Objective-C語(yǔ)言的官方說(shuō)法上看秕重,nil表示指向?qū)ο蟮闹羔樇此^對(duì)象的引用為空不同,NULL表示指向基礎(chǔ)類(lèi)型變量即C語(yǔ)言變量的指針為空。如果在非ARC程序的編寫(xiě)過(guò)程中溶耘,兩個(gè)空是可以互換的套鹅,但是在ARC環(huán)境下,普通指針和對(duì)象引用被嚴(yán)格限制汰具,不能交換使用卓鹿,因此也應(yīng)盡量不互換使用nil與NULL
23. BOOL與bool的區(qū)別?
bool是C語(yǔ)言C99標(biāo)準(zhǔn)中增添的變量類(lèi)型留荔,Object-C僅僅是從C語(yǔ)言繼承了這種類(lèi)型吟孙,該類(lèi)型有true和false兩個(gè)值,表示真和假聚蝶。BOOL是Obj-C獨(dú)有的布爾類(lèi)型杰妓,有YES和NO兩個(gè)值,分別是1和0的宏碘勉。Obj-C中同時(shí)認(rèn)為所有非0的值都是真值巷挥,0為假值
24.OC如何實(shí)現(xiàn)私有方法?
Obj-C語(yǔ)法中并沒(méi)有私有方法的概念,但是由于Obj-C是通過(guò)導(dǎo)入其他類(lèi)的頭文件來(lái)獲取其他類(lèi)所擁有的成員方法的聲明验靡,因此可以采用編寫(xiě)方法時(shí)倍宾,不聲明雏节,或僅在.m文件中的匿名類(lèi)別中聲明的方式,使方法對(duì)外不可見(jiàn)高职,即可達(dá)到方法私有化的目的钩乍。但是外部類(lèi)仍然可以通過(guò)@selector來(lái)訪問(wèn)確實(shí)存在的私有方法,因此嚴(yán)格來(lái)講Obj-C確實(shí)不能真正實(shí)現(xiàn)方法私有化
25.#import和#include的區(qū)別@ class代表什么
預(yù)編譯指令
Objective-C:#import
C怔锌,C++:#include
#import由gcc編譯器支持
在Objective-C中寥粹,#import被當(dāng)成#include指令的改良版本來(lái)使用。除此之外埃元,#import確定一個(gè)文件只能被導(dǎo)入一次涝涤,這使你在遞歸包含中不會(huì)出現(xiàn)問(wèn)題。
使用哪一個(gè)還是由你來(lái)決定岛杀。一般來(lái)說(shuō)妄痪,在導(dǎo)入Objective-C頭文件的時(shí)候使用#import,包含C頭文件時(shí)使用#include楞件。比如:
#import
#include
#include
#import比起#include的好處就是不會(huì)引起交叉編譯
二、@class是用來(lái)做類(lèi)引用的
@class就是告訴編譯器有這么一個(gè)類(lèi)裳瘪,至于類(lèi)的定義是啥不知道
@class一般用于頭文件中需要聲明該類(lèi)的某個(gè)實(shí)例變量的時(shí)候用到土浸,在m文件中還是需要使用#import
26. NSString和NSMutableString的區(qū)別
NSString是一個(gè)不可變的字符串對(duì)象。這不是表示這個(gè)對(duì)象聲明的變量的值不可變彭羹,而是表示它初始化以后黄伊,你不能改變?cè)撟兞克峙涞膬?nèi)存中的值,但你可以重新分配該變量所處的內(nèi)存空間派殷。而NSMutableString是可變的还最,意味著你可以追加它的內(nèi)存空間,或者修改它所分配的內(nèi)存空間中的值毡惜。
27..關(guān)于語(yǔ)句N(xiāo)SString * str= [NSData alloc]init,編譯和運(yùn)行分別str代表什么對(duì)象?
首先拓轻,聲明NSString *str是告訴編譯器,str是一個(gè)指向某個(gè)Objective-C對(duì)象的指針经伙。因?yàn)椴还苤赶虻氖鞘裁搭?lèi)型的對(duì)象扶叉,一個(gè)指針?biāo)嫉膬?nèi)存空間都是固定的,所以這里聲明成任何類(lèi)型的對(duì)象帕膜,最終生成的可執(zhí)行代碼都是沒(méi)有區(qū)別的枣氧。這里限定了NSString只不過(guò)是告訴編譯器,請(qǐng)把str當(dāng)做一個(gè)NSString來(lái)檢查垮刹,如果后面調(diào)用了非NSString的方法达吞,會(huì)產(chǎn)生警告。
接著荒典,你創(chuàng)建了一個(gè)NSData對(duì)象酪劫,然后把這個(gè)對(duì)象所在的內(nèi)存地址保存在str里吞鸭。那么運(yùn)行時(shí),str指向的內(nèi)存空間就是一個(gè)NSData對(duì)象契耿。你可以把str當(dāng)做一個(gè)NSData對(duì)象來(lái)用瞒大。
28.socket通信的幾個(gè)關(guān)鍵步驟
面向連接的socket通信就像與對(duì)方打電話,首先需要通過(guò)電話建立一個(gè)連接搪桂,連接建立好之后透敌,彼此才能雙向通信。它有幾個(gè)關(guān)鍵步驟
服務(wù)器端通常以守護(hù)進(jìn)程的方式實(shí)現(xiàn):
1:創(chuàng)建守護(hù)進(jìn)程
2:獲取或注冊(cè)服務(wù)
3:創(chuàng)建socket并綁定地址
4:開(kāi)始監(jiān)聽(tīng)
5:接收客戶(hù)端連接請(qǐng)求
6:進(jìn)行數(shù)據(jù)傳輸
客戶(hù)端
1:獲取或注冊(cè)服務(wù)
2:創(chuàng)建socket
3:發(fā)送連接請(qǐng)求
29.類(lèi)別意義踢械?與繼承的區(qū)別
當(dāng)我們添加頭文件以后酗电,對(duì)已知的類(lèi),會(huì)自動(dòng)提示你對(duì)這個(gè)類(lèi)添加的方法
主要用途内列,對(duì)于原生不會(huì)造成破壞撵术,使用原生就可以提示出你的方法
30.Core Foundation中提供了哪幾種操作Socket的方法?
CFNetwork话瞧、CFSocket和BSDSocket
31.用id聲明的對(duì)象有什么特性嫩与?
?沒(méi)有*號(hào)
?動(dòng)態(tài)數(shù)據(jù)類(lèi)型
?可以指向任何類(lèi)的對(duì)象(設(shè)置是nil),而不關(guān)心其具體類(lèi)型
?在運(yùn)行時(shí)檢查其具體類(lèi)型
?可以對(duì)其發(fā)送任何(存在的)消息
32交排,self.name=“object”name=“object”有什么區(qū)別划滋?
前者實(shí)際上是調(diào)用了set方法給變量賦值而后者是直接給變量賦值
33.shell中,將command1的輸出作為command2的輸出應(yīng)該使用的命令是埃篓?
重定向命令>
command1>command2
34.下面的數(shù)據(jù)結(jié)構(gòu)中不屬于線性結(jié)構(gòu)的是:棧处坪,鏈表,二叉樹(shù)架专,線性表
線性結(jié)構(gòu):棧同窘,鏈表,線性表
非線性結(jié)構(gòu):二叉樹(shù)
35部脚,oc中有沒(méi)有多繼承想邦,如果沒(méi)有用什么方法替代?
沒(méi)有用協(xié)議代替多繼承
36.常見(jiàn)的Objective-C的數(shù)據(jù)類(lèi)型有哪些委刘,和C的基本數(shù)據(jù)類(lèi)型有什么區(qū)別
OC中常用數(shù)據(jù)類(lèi)型有NSArray,NSDictionary,NSData,NSString,NSMutbleString等等案狠,和C的最大區(qū)別為OC中的類(lèi)型是類(lèi)類(lèi)型,需要實(shí)例化對(duì)象才能用钱雷。C中是一般數(shù)據(jù)類(lèi)型直接操作內(nèi)存空間
37.self.name=@“aa”和_name=@“aa”的區(qū)別
答:self.name=@“aa”是通過(guò)set方法進(jìn)行賦值骂铁,_name=@“aa”是直接復(fù)制給成員變量
38.C語(yǔ)言中指針與數(shù)組的區(qū)別
答:指針是變量可以修改指向的方向,數(shù)組名是地址常量罩抗,不能被修改
39.new delete malloc free的含義
c++:new申請(qǐng)內(nèi)存拉庵,delete釋放掉指針指向的內(nèi)存
c:malloc動(dòng)態(tài)申請(qǐng)內(nèi)存,free釋放指針指向的內(nèi)存
40.常引用什么時(shí)候使用
如果既要利用引用提高程序的效率套蒂,又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變钞支,就要使用常引用
41.c/oc/c++有什么區(qū)別和聯(lián)系
C相對(duì)于C++和OC而言更偏重于邏輯算法茫蛹,這是因?yàn)镃是面向過(guò)程,C++和OC都是面向?qū)ο笏感和C++的聯(lián)系:C是C++的一個(gè)自洽子集婴洼,C++是C的超集,OC是C的擴(kuò)展撼嗓,C++和OC基本兼容C的語(yǔ)法柬采。
42.const的用法
const修飾變量表示該變量是只讀變量(有些人管它叫常量),即只能引用而不能修改
constint *p;表示指針變量P指向的數(shù)據(jù)不能改
int*const p;表示指針變量P的值不能該且警,或者說(shuō)是指針P的指向不能改
43.[pool release]和[pool drain]有什么區(qū)別
drain和release都會(huì)促使自動(dòng)釋放池對(duì)象向池內(nèi)的每一個(gè)對(duì)象發(fā)送release消息來(lái)釋放池內(nèi)對(duì)象的引用計(jì)數(shù)粉捻,但是release觸發(fā)的這個(gè)操作,不會(huì)考慮對(duì)象是否需要release斑芜,而drain會(huì)在自動(dòng)釋放池向池內(nèi)對(duì)象發(fā)送release消息的時(shí)候肩刃,考慮對(duì)象是否需要release
44.自動(dòng)釋放池和GC一樣嗎,iphone有沒(méi)有GC
在引用計(jì)數(shù)環(huán)境下杏头,
ios是沒(méi)有垃圾回收的盈包,自動(dòng)釋放池是oc中管理內(nèi)存的一種方式,它和gc是本質(zhì)區(qū)別的醇王,自動(dòng)釋放池管理內(nèi)存的前提是呢燥,必須把要管理內(nèi)存的對(duì)象加入池內(nèi),才會(huì)生效厦画。而gc是不斷檢測(cè)當(dāng)前程序中是否有不再使用的內(nèi)存進(jìn)而釋放。
45.當(dāng)A類(lèi) 中的某個(gè)方法執(zhí)行到某處時(shí)滥朱,這時(shí)想在B類(lèi)中執(zhí)行某個(gè)方法根暑,如何做?并做簡(jiǎn)單說(shuō)明
用代理執(zhí)行代理方法
說(shuō)明:在b類(lèi)中實(shí)現(xiàn)協(xié)議方法徙邻,設(shè)置a的代理為b排嫌,在指定方法內(nèi)調(diào)用代理的協(xié)議方法
46.類(lèi)別的作用?
答案:category可以在不獲悉,不改變?cè)瓉?lái)代碼的情況下往里面添加新的方法缰犁,只能添加淳地,不能刪除修改。
并且如果類(lèi)別和原來(lái)類(lèi)中的方法產(chǎn)生名稱(chēng)沖突帅容,則類(lèi)別將覆蓋原來(lái)的方法颇象,因?yàn)轭?lèi)別具有更高的優(yōu)先級(jí)。
類(lèi)別主要有3個(gè)作用:
(1)將類(lèi)的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中并徘。
(2)創(chuàng)建對(duì)私有方法的前向引用遣钳。
(3)向?qū)ο筇砑臃钦絽f(xié)議。
47.簡(jiǎn)述extern
C的作用
可以在C++中使用C的已編譯好的函數(shù)模塊,在c++中么用到c語(yǔ)言寫(xiě)的函數(shù)麦乞,聲明一下,在DLL中經(jīng)吃誊睿看到,避免C++
name mangling劝评,主要用于動(dòng)態(tài)鏈接庫(kù),使得導(dǎo)出函數(shù)名稱(chēng)與C語(yǔ)言規(guī)則一致(不改變)倦淀,方便不同的編譯器甚至是不同的開(kāi)發(fā)語(yǔ)言調(diào)用蒋畜。
extern
"C"是告訴C++編譯器以C Linkage方式編譯,也就是抑制C++的name
mangling機(jī)制撞叽。
編程:
1.寫(xiě)出@proerty(nonatomic,retain)Person
*person;@synthesize person具體實(shí)現(xiàn)姻成。
- (void)setPerson:(Person *)person
{
if(_person !=person){
[_personrelease];
[_person =person retain];
}
}
- (Person *)person
{
return _person;
}
2.從普通id類(lèi)型對(duì)象轉(zhuǎn)換成數(shù)字對(duì)象,因?yàn)榕渲昧讼薅ㄔ~.1f能扒,所以結(jié)果四舍五入佣渴,并保留一位小數(shù)
NSDictionary* rowData =[NSDictionarydictionaryWithObjectsAndKeys:@"46.95",@"price",nil];
NSLog(@"a double value:%.1f",[(NSNumber*)[rowDataobjectForKey:@"price"] doubleValue]);
輸出:
a double value:47.0
3,寫(xiě)一個(gè)委托的interface
#import
@protocolMyDelegate;//聲明
@interfaceMyClass:NSobject
{
iddelegate;
}
@end
@protocolMyDelegate//委托方法
-(void)selector:(NSString *)args;
@end
4:請(qǐng)看下面一段代碼
staticint a=1;
intmain(){
intb=2;
char*c=NUll;
c=(char*)malloc(100*sizeof(char));
return0;
}
問(wèn):1初斑,訪問(wèn)abc三者的效率從高到低依次是:
bca
2辛润,在最壞情況下排序速度最快的是:歸并排序
復(fù)雜度最高的是:快排
a,快排,冒泡见秤,堆砂竖,歸并
5.看下面的程序
=========================================
NSMutableArray *arr = [[NSMutableArrayarray] retain];
NSString *str = [NSStringstringWithFormat:@"test"];
[str retain];
[arr addObject:str];
NSLog(@"%@%lu",str,[strretainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@%lu",str,[strretainCount]);
[arr removeObject:str];
NSLog(@"%@%lu",str,[strretainCount]);
==================================================
三次打印的retainCount分別是什么,為什么鹃答?
答:
分別是3乎澄,2,1测摔,
初始化的時(shí)候的為1置济,retain的時(shí)候+1,往數(shù)組里add的時(shí)候+1锋八,release的時(shí)候-1浙于,從數(shù)組里移除的時(shí)候-1