零散知識點(diǎn)記錄,總有你需要的,持續(xù)更新

1精算、監(jiān)聽導(dǎo)航欄的frame 和 屏幕旋轉(zhuǎn)起沖突,會崩潰

// 監(jiān)聽導(dǎo)航欄的frame
    [self.navigationController.navigationBar addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    NSNumber *num = change[@"new"];
    NSLog(@"-----------------------------num = %@",num);
    CGRect rect = num.CGRectValue;
    self.navBar.frame = rect;
}

- (void)dealloc{
    [self.navigationController.navigationBar removeObserver:self forKeyPath:@"frame"];
}

/**
     *  @author 孔凡列, 16-09-21 08:09:06
     *
     *  橫屏
     */
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];

2斥季、appDelegate 里面創(chuàng)建UIWindow的時候欺嗤,需要指定window的frame参萄,不然iOS8 的window的寬高會為0,但是iOS8以上就不會出現(xiàn)問題

self.window = [[UIWindow alloc] init];// 這樣不行
self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0,0,SCREEN_WIDTH,SCREEN_HEIGHT)];// 這樣就不會出現(xiàn)適配問題

3煎饼、AVAudioPlayer播放聲音的時候讹挎,設(shè)置volume 為 1.0 后還是超級小聲,超過1.0就會失真.添加一句代碼可完美解決

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

4吆玖、監(jiān)聽橫豎屏旋轉(zhuǎn)筒溃,系統(tǒng)通知

UIDeviceOrientationDidChangeNotification

5、swift NSObject 的方法都不適用了衰伯,很多都是struct 不是 class

String 是struct 屬于 Any 不是 AnyObject铡羡,所以iskind 不能用,用is 判斷

6意鲸、iOS KVO監(jiān)聽數(shù)組元素個數(shù)變化(數(shù)組地址改變烦周、插入、刪除怎顾、替換)

  • 需要 用 mutableArrayValueForKey 獲取到的可變數(shù)組(網(wǎng)上說控制器的數(shù)組沒辦法監(jiān)聽读慎,其實(shí)可以的,只是一定要用 mutableArrayValueForKey
  • 還有一個注意點(diǎn):分類中的數(shù)組是沒辦法監(jiān)聽到的槐雾,其他都可以

7夭委、iOS 系統(tǒng)字體

[UIFont systemFontSize];// 系統(tǒng)默認(rèn)字體大小 14

[UIFont smallSystemFontSize];// 小系統(tǒng)字體大小 12

[UIFont labelFontSize]募强;// 系統(tǒng)label字體大小 17

[UIFont buttonFontSize]株灸;// 系統(tǒng)button字體大小 18

8、typeof(self) strongSelf = weakSelf; 的使用解答地址

總結(jié)
1擎值、 在 Block 內(nèi)如果需要訪問 self 的方法慌烧、變量,建議使用 weakSelf鸠儿。
2 屹蚊、如果在 Block 內(nèi)需要多次 訪問 self,則需要使用 strongSelf进每。此時self不會被釋放汹粤,當(dāng)block執(zhí)行完后,會自動釋放該strongSelf

9田晚、layoutSubviews 什么時候調(diào)用嘱兼?drawRect 什么時候調(diào)用?

  • 視圖的內(nèi)容需要重繪時可以調(diào)用 setNeedsDisplay 方法贤徒,該方法會設(shè)置該視圖的 displayIfNeeded 變量為 YES 芹壕,NSRunLoop 在下一次循環(huán)檢中測到該值為 YES 則會自動調(diào)用 drawRect 進(jìn)行重繪胃惜。

  • 視圖的內(nèi)容沒有變化,但在父視圖中位置變化了可以調(diào)用 setNeedsLayout,該方法會設(shè)置該視圖的 layoutIfNeeded 變量為YES哪雕,NSRunLoop 在下一次循環(huán)檢中測到該值為 YES 則會自動調(diào)用 layoutSubViews 進(jìn)行重繪。

10鲫趁、AFN3.0 支持ipv6斯嚎,代碼配置

HTTPS AFN 配置.png

11、取狀態(tài)欄判斷網(wǎng)絡(luò)狀態(tài)

注意:飛行模式和關(guān)閉移動網(wǎng)絡(luò)都拿不到dataNetworkType挨厚;1 - 2G; 2 - 3G; 3 - 4G; 5 - WIFI

BOOL flag = NO;
    UIApplication *app = [UIApplication sharedApplication];
    NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
    int netType = 0;
    //獲取到網(wǎng)絡(luò)返回碼
    for (id child in children) {
        NSLog(@"child = %@",NSStringFromClass([child class]));
        if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
            //獲取到狀態(tài)欄,飛行模式和關(guān)閉移動網(wǎng)絡(luò)都拿不到dataNetworkType堡僻;1 - 2G; 2 - 3G; 3 - 4G; 5 - WIFI
            netType = [[child valueForKeyPath:@"dataNetworkType"] intValue];
            
            switch (netType) {
                case 0:
                    flag = NO;
                    //無網(wǎng)模式
                    break;
                
                default:
                    flag = YES;
                    break;
            }
        }
    }

12、label 文字實(shí)現(xiàn)豎直排布

  • 只需要設(shè)置 numberOfLines = 0 然后再調(diào)用sizeToFit

13疫剃、本地搭建IPv6環(huán)境測試你的APP(OS X 10.11 新加的功能)

打開系統(tǒng)偏好設(shè)置-按住 option - 點(diǎn)擊共享-創(chuàng)建NAT64

Paste_Image.png

14钉疫、給 按鈕 的imageView添加動畫組

注意不能設(shè)置按鈕的 backgroundImage 否則沒動畫效果

[playBtn setImage:[UIImage imageNamed:@"voice_button_01"] forState:UIControlStateNormal];
 //設(shè)置動畫圖片的資源
playBtn.imageView.animationImages = self.animateBtnArrM;
//設(shè)置動畫的持續(xù)時間
playBtn.imageView.animationDuration = 1.5;
//設(shè)置動畫的執(zhí)行次數(shù)
playBtn.imageView.animationRepeatCount = MAXFLOAT;
//開始動畫
[playBtn.imageView startAnimating];

15、使用SDWebImage 加載 gif圖片 url 巢价,不能壓縮牲阁,否則無法正常顯示

加載GIF 可以 用webView 加載,UIWebView 有緩存壤躲,WKWebView 在 iOS 9 之后才有情況緩存的接口

16城菊、滾動視圖(UIScrollView 、UITableView碉克、UIWebView凌唬、WKWebView、UICollectionView)界面點(diǎn)擊事件漏麦,添加點(diǎn)擊手勢需要實(shí)現(xiàn)其中一個代理方法客税,才有點(diǎn)擊效果

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    
    return YES;
    
}

17、cocoapod search 不到所需的庫

  • rm ~/Library/Caches/CocoaPods/search_index.json 執(zhí)行完重新 search 就行

18撕贞、設(shè)置UITextField 水印居中

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 200, 200, 30)];
    textField.borderStyle = UITextBorderStyleLine;
    textField.placeholder = @"hello world";
    UILabel *label = [textField valueForKey:@"_placeholderLabel"];
    label.textAlignment = NSTextAlignmentCenter;
    [textField setValue:label forKey:@"_placeholderLabel"];
    [self.view addSubview:textField];

19更耻、優(yōu)雅地隱藏顯示導(dǎo)航欄

  • 遵守協(xié)議 <UINavigationControllerDelegate>
  • 設(shè)置代理 self.navigationController.delegate = self;
  • 重寫方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    
    BOOL isVC = [viewController isKindOfClass:[self class]];
    [self.navigationController setNavigationBarHidden:isVC animated:YES];
}

20、OC 的 指針麻掸,swift 的表示方法:

static const void* mainQueueKey = @"mainQueue";
static void* mainQueueContext = @"mainQueue";

private let mainQueueKey = UnsafeMutablePointer<Void>.alloc(1)
private let mainQueueValue = UnsafeMutablePointer<Void>.alloc(1)

21酥夭、swift 實(shí)現(xiàn)KVO以及提供給OC調(diào)用

  • 需要使用@dynamic 和 @objc使用,默認(rèn)如果使用@dynamic swift會隱式添加@objc

22脊奋、swift 使用runtime

  • 如果是純swift類熬北,要使用runtime需要加上@dynamic,如果是直接或者間接繼承NSObject(這個還是動態(tài)執(zhí)行的)诚隙,就可以直接使用runtime

23讶隐、宏定義的 attribute((visibility ("default"))) 作用

  • visibility屬性是設(shè)置將本項目的函數(shù)作為庫使用時的可見性。g++編譯時, 加入-fvisibility=hidden參數(shù), 會將所有默認(rèn)public屬性設(shè)為hidden, 導(dǎo)致庫外文件不可見

  • 如果設(shè)置了attribute((visibility ("default")))的函數(shù), 其public屬性仍能對外可見, 而不是hidden久又∥籽樱可見編譯指令 -fvisibility是對所有屬性符號進(jìn)行處理, 而attribute((visibility ("default")))是對特定函數(shù)可見性進(jìn)行設(shè)置, 避免沖突效五。
    原文地址

24、ARC 下使用 autoreleasepool

  • 如果你創(chuàng)建太多的臨時對象在你的代碼中炉峰,你會注意到你的內(nèi)存用量會增加直到對象被釋放掉畏妖。問題是內(nèi)存只有在UIKit排空(drains)自動釋放池的時候才能被釋放,這意味著內(nèi)存被占用的時間超過了需要疼阔。好消息是你可以在你的@autoreleasepool段中創(chuàng)建臨時對象來避免上述情況
NSArray *urls = <# An array of file URLs #>;
for (NSURL *url in urls) { 
@autoreleasepool { 
NSError *error; 
NSString *fileContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 
/* Process the string, creating and autoreleasing more objects. */
}}

25戒劫、監(jiān)聽橫豎屏切換

  • 橫豎屏切換的時候,系統(tǒng)會響應(yīng)一些函數(shù)婆廊,其中 viewWillLayoutSubviewsviewDidLayoutSubviews迅细。

26、并發(fā) 和 并行的區(qū)別

  • 并發(fā):當(dāng)有多個線程在操作時,如果系統(tǒng)只有一個CPU,則它根本不可能真正同時進(jìn)行一個以上的線程淘邻,它只能把CPU運(yùn)行時間劃分成若干個時間段,再將時間 段分配給各個線程執(zhí)行茵典,在一個時間段的線程代碼運(yùn)行時,其它線程處于掛起狀宾舅。.這種方式我們稱之為并發(fā)(Concurrent)统阿。

  • 并行:當(dāng)系統(tǒng)有一個以上CPU時,則線程的操作有可能非并發(fā)。當(dāng)一個CPU執(zhí)行一個線程時贴浙,另一個CPU可以執(zhí)行另一個線程砂吞,兩個線程互不搶占CPU資源,可以同時進(jìn)行崎溃,這種方式我們稱之為并行(Parallel)蜻直。

區(qū)別:并發(fā)和并行是即相似又有區(qū)別的兩個概念,并行是指兩個或者多個事件在同一時刻發(fā)生袁串;而并發(fā)是指兩個或多個事件在同一時間間隔內(nèi)發(fā)生概而。

例子:
1).并發(fā) 一個送外賣的A需要把兩份外賣分別送到兩個客戶B和C手里。 A必須先送完B外賣才能接著送C的囱修。這就是并發(fā)

2).并行 客戶C 分別從餓了么和美團(tuán)訂了一共兩份外賣赎瑰。那么外賣員A和外賣員B需要把外賣一同送到客戶C手里。 這就是并行

27破镰、 使用Instrument 的time profiler 調(diào)試

  • 默認(rèn)是不會顯示方法名餐曼,需要項目中開啟 Build Settings -> Build Options -> Debug -> DWARF with dSYM File

28、設(shè)置collectionView header 懸浮

  • 設(shè)置 shouldInvalidateLayoutForBoundsChange屬性為 YES就好
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲜漩,一起剝皮案震驚了整個濱河市源譬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孕似,老刑警劉巖踩娘,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喉祭,居然都是意外死亡养渴,警方通過查閱死者的電腦和手機(jī)雷绢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來理卑,“玉大人翘紊,你說我怎么就攤上這事∶赀耄” “怎么了霞溪?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長中捆。 經(jīng)常有香客問我,道長坊饶,這世上最難降的妖魔是什么泄伪? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮匿级,結(jié)果婚禮上蟋滴,老公的妹妹穿的比我還像新娘。我一直安慰自己痘绎,他們只是感情好津函,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孤页,像睡著了一般尔苦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上行施,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天允坚,我揣著相機(jī)與錄音,去河邊找鬼蛾号。 笑死稠项,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲜结。 我是一名探鬼主播展运,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼精刷!你這毒婦竟也來了拗胜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贬养,失蹤者是張志新(化名)和其女友劉穎挤土,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體误算,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仰美,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年迷殿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咖杂。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡庆寺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诉字,到底是詐尸還是另有隱情懦尝,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布壤圃,位于F島的核電站陵霉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伍绳。R本人自食惡果不足惜踊挠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冲杀。 院中可真熱鬧效床,春花似錦、人聲如沸权谁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旺芽。三九已至沪猴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間采章,已是汗流浹背字币。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留共缕,地道東北人洗出。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像图谷,于是被迫代替她去往敵國和親翩活。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫便贵、插件菠镇、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評論 4 61
  • 上班,需要每天都擠地鐵承璃,早上八點(diǎn)是上班高峰期利耍,而我用剛好處于兩條地鐵交叉處,每次八點(diǎn)走到地鐵時都是長長的一條龍。好...
    畫布坊閱讀 231評論 0 0
  • 不想每次開頭都是以感嘆時間為由隘梨,惋惜逝去的時光程癌。或許默然沉浸在青春中轴猎,不知青春韶華正美嵌莉,應(yīng)當(dāng)珍惜。 席慕容說過捻脖,...
    蘇菲SOPHIE_5d73閱讀 134評論 0 1
  • 儂撒寧(你啥人)? 趙建楠用這句剛剛學(xué)會的上海話問道锐峭。他在睡夢中被一陣手機(jī)聲吵醒,赤裸的胳膊滑出被窩在黑暗中胡亂地...
    舞風(fēng)眠雨閱讀 232評論 0 2
  • 看慣了城市喧嘩的我可婶,驀然回首沿癞,才發(fā)現(xiàn)原來寧靜的村莊有種很特別的美,那是一種淡雅的美矛渴,清新的美抛寝,是我心目中最...
    明天更美好_e2a0閱讀 345評論 0 1