以下是實際開發(fā)中用到的知識點,但是又想不起來,需要之注意的知識點
#pragma mark --isKindOfClass與isMemberOfClass
isKindOfClass 是對于繼承來講的 Teacher : Person : NSObject
teacher 是Teacher疮茄、Person、NSObject類或其子類
isMemberOfClass 是對于該類(Teacher)的成員來講的 判斷是不是由該類創(chuàng)建出來的
teacher 是Teacher類的成員,由Teacher類創(chuàng)建的 判斷的內(nèi)容更加精確抵代。
isSubclassOfClass 使用和isKindOfClass差不多/只不過一個是類方法,一個是對象方法
#pragma mark --?super刁憋、superClass采驻、class的區(qū)別
class:獲取方法調(diào)用者類名
superclass:獲取方法調(diào)用者的父類類名
super:編譯修飾符,不是指針,指向父類的 "標(biāo)志",
本質(zhì)還是拿到當(dāng)前對象去調(diào)用父類的方法
注意:super并不是拿到父類對象去調(diào)用父類方法
#pragma mark -- removeFromSuperview
// 移除contentView上所有的子控件
[self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
#pragma mark --?isEqual、==恕沫、isEqualToString
isEqual與==是一樣的 比較內(nèi)存地址
isEqualToString 比較對象的內(nèi)容
可以重寫對象的isEqual方法來欺騙系統(tǒng),通常用來完成從數(shù)組中刪除某個對象不能實現(xiàn) (對象一樣但是內(nèi)存地址不一樣)
也可以通過比較內(nèi)存是否一樣進行刪除的操作 --->重寫更符合封裝的原則
[persons removeObject:person]; 這樣返回YES的時候才會去刪除該對象均驶,返回NO認(rèn)為數(shù)組中沒有該對象昏兆,肯定不會刪除
在person.m中實現(xiàn)下面的方法
- (BOOL)isEqual:(id)object
{//系統(tǒng)默認(rèn)
//return self == object;
//當(dāng)一個人的name和年齡一樣的時候就認(rèn)為是同一個人
return [self.name isEqualToString:other.name] && [self.age isEqualToString:other.age];
}
#pragma mark --?nil? Nil? NULL? NSNull
nil:指向oc中對象的空指針 對象是空的 對象是存在的
Nil:指向oc中類的空指針 類是空的
NULL:指向其他類型的空指針,如一個c類型的內(nèi)存指針 還不是一個對象
NSNull:在集合對象中妇穴,表示空值的對象
1爬虱、NULL表示這個字符串不指向任何的東西,如果這時候你調(diào)用它的方法腾它,那么就會出現(xiàn)空指針異常跑筝。
2、""表示它指向一個長度為0的字符串瞒滴,這時候調(diào)用它的方法是安全的曲梗。
3、NULL不是對象妓忍,""是對象虏两,所以NULL沒有分配空間,""分配了空間
*******結(jié)論********
在OC/C++中世剖,nil可以調(diào)用任何的方法定罢,都不會報錯
NULL 表示地址是0
nil是指針指向NULL的空對象 nil是一個對象,但是是一個空對象
若obj為nil:
[obj message]將返回NO,而不是NSException
若obj為NSNull:
[obj message]將拋出異常NSException
#pragma mark --?NSDictionary
字典里面添加另外一個字典
[dictionaryM addEntriesFromDictionary: newDictionary];
判斷字典里面是否包含某一個key
if ([[dicitionary allKeys] containsObject:key])
#pragma mark --?NSString
判斷一個字符串是否為空旁瘫,首先就要確保他不是null(不是空對象),然后再判斷他的長度(是一個對象后再判斷長度)祖凫。
if(string != NULL && string.length != 0) {字符串里面才有東西}
if([string isKindOfClass:[NSNull Class]] || string.length == 0) {字符串為空}
控制臺打印的NSNumber和NSString是一樣的,需要注意!!!!!
#pragma mark --?自定義代碼塊存放路徑
在Finder文件夾command + Shift + G
~/Library/Developer/Xcode/UserData/CodeSnippets
換新電腦,直接替換文件夾中的內(nèi)容即可酬凳。
#pragma mark --?Xcode中的快捷鍵
停用斷點 command+control+\
當(dāng)前行插入斷點 command+\
當(dāng)前行啟用斷點 command+option+\
最小化 command+m
全部最小化 command+option+m
網(wǎng)絡(luò): command + Shift + C
強制重新啟動Mac control+command+右上角
便簽/Xcode的控制臺輸出 command+shift+Y
展示文件的真實位置 command+shift+J
打開emoji表情鍵盤 command + control + 空格
顯示隱藏文件 ?shift + Command + .
類文件之間的跳轉(zhuǎn) Ctrl + Command + 上箭頭 / 下箭頭
折疊代碼 command + option(Alt) + 左箭頭/右箭頭
退回 command + Ctrl + 左箭頭/右箭頭
當(dāng)前文件中全部選中當(dāng)前單詞 Ctrl + Command + E
命令行輸入 find . -name "*.m" | xargs wc -l 查找當(dāng)前路徑下的所有.m文件行數(shù)
#pragma mark --?網(wǎng)絡(luò)安全協(xié)議
URL的基本格式:協(xié)議://主機地址/路徑
不同的協(xié)議:代表不同的資源查找方式惠况,資源傳輸方式 http file mailto FTP
主機地址:存放資源的主機的IP地址
路徑:資源在主機中的具體位置
NSAppTransportSecurity
NSAllowsArbitraryLoads
#pragma mark --?window
//這樣獲得的窗口是目前顯示在屏幕最上面的窗口 取出來的可能不是keywindow 因為:鍵盤也是一個窗口(window)
UIWindow * window = [[UIApplication sharedApplication].windows lastObject];
UIWindow * window = [UIApplication sharedApplication].keyWindow; 通常用這個
#pragma mark --?static
C語言中的static
a. 修飾局部變量.
b. 修飾全局變量.
c. 修飾函數(shù).
Object-C中的static關(guān)鍵字.
a. static不能修飾屬性 也不能修飾方法.
b. static可以修飾方法中的局部變量.
如果方法中的局部變量被static修飾,那么這個變量就會被變成靜態(tài)變量.
存儲在常量區(qū) 當(dāng)方法執(zhí)行完畢之后 不會回收 下次再執(zhí)行這個方法的時候 直接使用 而不會再聲明了.
#pragma mark --?內(nèi)存中的五大區(qū)域
棧: 局部變量. 當(dāng)局部變量的作用域被執(zhí)行完畢之后,這個局部變量就會被系統(tǒng)立即回收.
堆: OC對象.使用C函數(shù)申請的空間.
BSS段: 未初始化的全局變量、靜態(tài)變量. 一旦初始化就回收 并轉(zhuǎn)存到數(shù)據(jù)段之中.
數(shù)據(jù)段: 已經(jīng)初始化的全局變量宁仔、靜態(tài)變量. 直到程序結(jié)束的時候才會被回收.
代碼段: 代碼. 程序結(jié)束的時候,系統(tǒng)會自動回收存儲在代碼段中的數(shù)據(jù).
棧稠屠、BSS段、數(shù)據(jù)段、代碼段存儲在它們中的數(shù)據(jù)的回收,是由系統(tǒng)自動完成的.不需要我們干預(yù).
#pragma mark --?單個對象的內(nèi)存泄露.
1).什么叫做內(nèi)存泄露?
指對象沒有被回收,該回收的時候而沒有被回收,一直駐留在內(nèi)存之中直到程序結(jié)束.
2).單個對象發(fā)生內(nèi)存泄露的原因.
-> 有對象的創(chuàng)建,沒有匹配的release
-> retain與release不匹配.
-> 在不恰當(dāng)?shù)臅r候,指針賦值為nil
-> 在方法中不當(dāng)使用retain.
3).如何做到單個對象被正確釋放
-> 有對象的創(chuàng)建就要有對象的release完箩。
-> 有多少個retain就要有多少個release赐俗。
-> 不要輕易的為1個指針賦值為nil 除非指針是1個野指針.
-> 在方法中不要輕易的為參數(shù)retain
#pragma mark - 枚舉
//枚舉的定義
typedef NS_ENUM(NSUInteger, ActionEnum) {
ActionEnumTop = 1 << 0,
ActionEnumBottom = 1 << 1,
ActionEnumLeft = 1 << 2,
ActionEnumRight = 1 << 3,
};
//調(diào)用
[self matchAction:ActionEnumTop | ActionEnumBottom];
//方法的處理
- (void)matchAction:(ActionEnum)actionEnum
{
NSLog(@"%ld", actionEnum);
if ((actionEnum & ActionEnumTop) == ActionEnumTop) {
NSLog(@"ActionEnumTop");
}
if ((actionEnum & ActionEnumBottom) == ActionEnumBottom) {
NSLog(@"ActionEnumBottom");
}
if ((actionEnum & ActionEnumLeft) == ActionEnumLeft) {
NSLog(@"ActionEnumLeft");
}
if ((actionEnum & ActionEnumRight) == ActionEnumRight) {
NSLog(@"ActionEnumRight");
}
}