閱讀NSObjec期間發(fā)現(xiàn)了很多有意思的東西,記錄一下
1.許多方法都系統(tǒng)都實(shí)現(xiàn)了它的加號(hào)實(shí)現(xiàn)和減號(hào)實(shí)現(xiàn),不過內(nèi)部的實(shí)現(xiàn)機(jī)制有很多是不同的
2.關(guān)于isMemberOfClass和isKindOfClass這個(gè)兩個(gè)方法,看一下源碼我們就可以很清晰的分辨它們的區(qū)別:
- (BOOL)isMemberOfClass:(Class)cls {
? ? return [self class] == cls;
}
- (BOOL)isKindOfClass:(Class)cls {
? ? for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
? ? ? ? if (tcls == cls) return YES;
? ? }
? ? return NO;
}
簡(jiǎn)單明了,isMemberOfClass只會(huì)判斷當(dāng)前類是否等于cls,而isKindOfClass會(huì)一直去尋找父類
3.performSelector內(nèi)部其實(shí)是調(diào)用了((id(*)(id, SEL))objc_msgSend)((id)self, sel)