1.雖然Objective-C在語(yǔ)法上禁止類使用多繼承,但是在協(xié)議的遵守上卻允許使用多繼承。所以可以用協(xié)議來(lái)實(shí)現(xiàn)多繼承。
2.父類指針可以指向子類對(duì)象
3.一個(gè)對(duì)象(Object)的isa指向了這個(gè)對(duì)象的類(Class),而這個(gè)對(duì)象的類(Class)的isa指向了metaclass。這樣我們就可以找到靜態(tài)方法和變量了。
4.NSRange 各種初始化方法
NSRange range1;
// 分別賦值
range1.location = 18;
range1.length = 20;
print_range(range1);
// 結(jié)構(gòu)初始化方法
NSRange range2 = {20, 40};
print_range(range2);
// 調(diào)用輔助的build函數(shù)
NSRange range3 = NSMakeRange(30, 60);
print_range(range3);
// 暫時(shí)沒有確定的有意義的值,可以設(shè)置成NSNotFound
NSRange range4 = {NSNotFound, NSNotFound};
print_range(range4);
5.block
block是ios中一種比較特殊的數(shù)據(jù)類型
block的作用:
用來(lái)保存某一段代碼,可以在適當(dāng)?shù)臅r(shí)間再取出來(lái)調(diào)用
功能類似于函數(shù)和方法
默認(rèn)情況下block存儲(chǔ)在棧中, 如果對(duì)block進(jìn)行一個(gè)copy操作, block會(huì)轉(zhuǎn)移到堆中
如果block在棧中, block中訪問(wèn)了外界的對(duì)象, 那么不會(huì)對(duì)對(duì)象進(jìn)行retain操作
如果block在堆中, block中訪問(wèn)了外界的對(duì)象, 那么會(huì)對(duì)外界的對(duì)象進(jìn)行一次retain
6.@synthesize
@synthesize在.m文件里自動(dòng)生成了get/set方法。因此,我們只要在@implementation后面加上一行:@synthesize 就可以自動(dòng)生成get/set方法了,省掉了很多麻煩。
從Xcode4.4開始,編譯器會(huì)自動(dòng)為每一條@property都添加一條對(duì)應(yīng)的@synthesize,因此以后我們只要寫一個(gè)@property就可以了!
- 點(diǎn)語(yǔ)法:編譯器會(huì)自動(dòng)將點(diǎn)語(yǔ)法轉(zhuǎn)換成set、get方法的調(diào)用代碼
copy和mutableCopy區(qū)別:
copy, 無(wú)論被復(fù)制的對(duì)象是否是可變的, 復(fù)制出來(lái)的副本都是不可變的
mutableCopy, 無(wú)論被復(fù)制的對(duì)象是否是不可變的, 復(fù)制出來(lái)的副本是可變的
// 從不可變到可變, 地址不一樣
// 從可變到可變, 地址不一樣
// 從可變到不可變, 地址不一樣
// 從不可變到不可變, 地址一樣
( 原因: copy核心就是為了保證修改其中一個(gè)對(duì)象不會(huì)影響到另外一個(gè)對(duì)象
由于源和副本都不可以被修改, 所以不用創(chuàng)建一個(gè)新的對(duì)象)
/*
總結(jié):
核心: 修改源對(duì)象不會(huì)影響到副本對(duì)象, 修改副本對(duì)象不會(huì)影響到源對(duì)象
深拷貝和淺拷貝
會(huì)創(chuàng)建新的對(duì)象的拷貝, 我們稱之為深拷貝
不會(huì)創(chuàng)建新對(duì)象的拷貝, 我們稱之為淺拷貝(指針拷貝)
*/
對(duì)于mutableCopy,此重新創(chuàng)建了一個(gè)內(nèi)存地址,為深拷貝。
而字符串默認(rèn)是淺拷貝
9.// 只要在對(duì)象前面加上__block, 無(wú)論block在棧中還是堆中, 都不會(huì)對(duì)外界的對(duì)象進(jìn)行retain操作
10.在ARC中 assign,weak,copy,strong 屬性的作用,下列說(shuō)法正確的是(多選)( ABCD )
A.copy : 一般用于NSString\block
B.strong : 一般用于除了NSString\block以外的OC對(duì)象
C.weak : 一般用于代理\UI控件 當(dāng)2個(gè)對(duì)象相互引用,一端用strong,一端用weak
D.assign : 基本數(shù)據(jù)類型、枚舉、結(jié)構(gòu)體(非OC對(duì)象)
11.UIViewController在整個(gè)生命周期中,以下各個(gè)方法的調(diào)用順序正確的是( A )
A. init -> viewDidLoad -> viewWillApper -> viewDidAppear -> viewWillDisapper -> viewDidDisapper
12.關(guān)于NSSet、NSArray、NSDictionary
NSArray 是順序的,可以通過(guò)下標(biāo)獲取數(shù)組中的對(duì)象
NSDictionary 是無(wú)序的,通過(guò)鍵值對(duì)匹配,可以通過(guò)key-->value
NSSet、NSArray、NSDictionary只能保存Cocoa對(duì)象,不能用于保存C語(yǔ)言中的基本數(shù)據(jù)類型
13.iOS中代理設(shè)計(jì)模式
代理本身是一個(gè)對(duì)象,這個(gè)對(duì)象是專門代表被代理對(duì)象來(lái)和程序中其他對(duì)象打交道的。
代理的主要價(jià)值是它可以讓你容易的定制各種對(duì)象的行為。
當(dāng)一個(gè)類的某些功能需要被別人來(lái)實(shí)現(xiàn),但是既不明確是些什么功能,又不明確誰(shuí)來(lái)實(shí)現(xiàn)這些功能的時(shí)候,代理模式就可以派上用場(chǎng)。
-
import 是 #include 的替代指令,防止重復(fù)引用
15.代理和通知
共同點(diǎn)
利用通知和代理都能完成對(duì)象之間的通信
(比如A對(duì)象告訴D對(duì)象發(fā)生了什么事情, A對(duì)象傳遞數(shù)據(jù)給D對(duì)象)
不同點(diǎn)
代理 : 1個(gè)對(duì)象只能告訴另1個(gè)對(duì)象發(fā)生了什么事情
通知 : 1個(gè)對(duì)象能告訴N個(gè)對(duì)象發(fā)生了什么事情, 1個(gè)對(duì)象能得知N個(gè)對(duì)象發(fā)生了什么事情
16.好用的打包工具:
https://github.com/Caiflower/Autobuild
ipa包丟到fir.im上. 測(cè)試們自己掃碼下載啊
http://fir.im/
17.#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
用法:self.richLabel.textColor = UIColorFromRGB(0x7e7e7e);