iOS開發(fā)備忘筆記 (持續(xù)更新中)

  1. NSString常量定義:

    正確:

     NSString * const name = @"value";
    

    錯(cuò)誤:

     const NSString * name = @"value"; 
     NSString const * name = @"value";
    

    總結(jié): const* 前 代表 *name 不可變, 在 * 后代表 name不可變. 我們一般都 是想讓 name 的值不變, 所以應(yīng)該把 const 放在 * 后;

  2. 格式化日期輸出星期的不同表示:

     NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
     dateFormatter.dateFormat = @"E EE EEE EEEE EEEEE EEEEEE EEEEEEE";
     NSString * dateStr = [dateFormatter stringFromDate:[NSDate date]];
     NSLog(@"%@", dateStr);
     //輸出:    周六 周六 周六 星期六 六 周六 周六
    
  3. UICollectionView 更新數(shù)據(jù)源 和 更新界面一定要一對(duì)一. (備忘, 有空補(bǔ)充代碼)

  4. URL編碼 (先備忘, 有空補(bǔ)說(shuō)明):

    C方法:

     str = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)str,NULL,CFSTR("%+ /?#&="),kCFStringEncodingUTF8));
    

    OC方法:

     urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    

    OC新方法:

     - (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters NS_AVAILABLE(10_9, 7_0);
    
  5. <a name="UITableViewStyle"></a>UITableView 不同 style 的區(qū)別 :

    iOS7 之后, 不同 UITableViewStyle 的外觀基本上相同了, 那它們還有什么不易見(jiàn)的區(qū)別呢:

    • UITableViewStylePlain :

      1. SectionHeaderFooter 的高度默認(rèn)為 0 ;
      2. 并且 Section 的頭腳視圖會(huì)懸停在最上方和最下方;
    • UITableViewStyleGrouped :

      1. 同上相反, Section的頭腳高度必須不能為 0 . 為 0 設(shè)置無(wú)效, 系統(tǒng)會(huì)默認(rèn)一個(gè)高度, 如果不需要可以設(shè)置一個(gè)很小的小數(shù);
      2. Section 的 頭腳視圖不會(huì)懸停在上面和下面, 會(huì)隨著表格一起滑動(dòng);
  6. git 不能跟蹤文件名大小寫的改變, 造成一些問(wèn)題怎么辦?

    (如: 圖片名稱改了大小寫, 但是git沒(méi)有提交這一改變, 造成下次檢出代碼運(yùn)行APP時(shí)讀取不到圖片)

    1. git設(shè)置為大小寫敏感:

      • 命令行:

          git config core.ignorecase false
        
      • 直接修改.git文件夾的config文件中

          ignorecase = false
        
    2. 如果已經(jīng)出問(wèn)題, 可以 先刪除文件嗦篱,再添加進(jìn)去

  7. 導(dǎo)致JSON不能正確解析的字符 :

    • 經(jīng)過(guò)測(cè)試: 遍歷所有Unicode字符 (UCS-2標(biāo)準(zhǔn) 0 - 65536 ), 循環(huán)放入json中解析, 發(fā)現(xiàn)有34個(gè)字符出現(xiàn)解析失敗, 前32個(gè)字符為ASCII碼為 0 - 31 的控制字符 , 另外兩個(gè)為 "\ .

      (ASCII碼:實(shí)際字符)
      (
          "0:",
          "1:?",
          "2:?",
          "3:?",
          "4:?",
          "5:?",
          "6:?",
          "7:\a",
          "8:\b",
          "9:\t",
          "10:\n",
          "11:\v",
          "12:\f",
          "13:\r”,
          "14:?",
          "15:?",
          "16:?",
          "17:?",
          "18:?",
          "19:?",
          "20:?",
          "21:?",
          "22:?",
          "23:?",
          "24:?",
          "25:?",
          "26:?",
          "27:?",
          "28:?",
          "29:?",
          "30:?",
          "31:?",
          "34:\"",
          "92:\\"
      )
      
    • 解決方法: 在解析JSON之前替換掉或去掉這些字符:

      1. 使用循環(huán)替換為空的辦法 , 性能消耗0.01秒以內(nèi) 且大部分json在0.001秒以內(nèi):

        /**
          *  刪除特殊字符
          */
        +(NSString *)deleteSpecialCharacters:(NSString *)str{
            
            //刪除影響 JSON 解析的字符 : [ASCII碼:0~31 以及 " \ ] 共34個(gè)字符 , " \ 一般不能直接去掉,需要單獨(dú)處理.
            
            for (int i = 0; i <= 31; i++) {
                NSString *value = [NSString stringWithFormat:@"%C",(unichar)i];
                str = [str stringByReplacingOccurrencesOfString:value withString:@""];
            }
            return str;
        }
        
      2. 優(yōu)化特殊字符的替換方式, 現(xiàn)在效率比以前高10倍, json串替換基本都在0.001秒以內(nèi):

        /**
          *  刪除特殊字符
          */
        +(NSString *)deleteSpecialCharacters:(NSString *)str{
        
            //使用此方法效率比上面快5-10倍, 用 NSString -componentsSeparatedByCharactersInSet: 在控制字符處將字符串分割成一個(gè) NSArray裙椭;再用一個(gè) NSPredicate 去除空串;最后曼尊,用 NSArray -componentsJoinedByString: 用單個(gè)空格符將數(shù)組重新拼成字符串
            //[NSCharacterSet controlCharacterSet] 控制字符集 ASCII碼(0~31 and 127)
            NSArray<NSString *> *components = [str componentsSeparatedByCharactersInSet:[NSCharacterSet controlCharacterSet]];
            components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]];
            str = [components componentsJoinedByString:@" "];
            
            return str;
        }
        
        
  8. int a; //a不一定等于0

    //錯(cuò)誤
    int a;
    a++;
    
    //正確
    int a = 0;
    a++;
    
  9. 取一個(gè)int型變量的絕對(duì)值, 用abs()函數(shù)有風(fēng)險(xiǎn). (當(dāng)值為-2147483648的時(shí)候)

    //首先我們來(lái)看int的范圍:
    NSLog(@"%i", INT_MIN); //輸出 -2147483648
    NSLog(@"%i", INT_MAX); //輸出 2147483647
    
    //我們知道int的范圍是: -2147483648 ~ 2147483647
    
    //然后我們用 abs() 函數(shù)取 -2147483648 的絕對(duì)值:
    NSLog(@"%i",abs(-2147483648)); //輸出 -2147483648, 并且Xcode報(bào)警告
    
    //為什么呢? -2147483648 的絕對(duì)值不應(yīng)該是 2147483648 嗎? 這是因?yàn)?2147483648 超過(guò)int的最大值(2147483647)了, 所以最高位被截?cái)嗔?
    //所以不能用 abs() 函數(shù)來(lái)取 -2147483648 的絕對(duì)值, 這個(gè)函數(shù)的參數(shù)和返回值都是int型;
    //我們應(yīng)該使用 labs() 函數(shù), 這個(gè)函數(shù)的參數(shù)和返回值都是long型
    
    NSLog(@"%li",labs(-2147483648)); //輸出 2147483648
    
    //好了, 這下結(jié)果正確了, 當(dāng)然這只是極端的情況, 一般情況還是可以放心使用 abs() 函數(shù)
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末效览,一起剝皮案震驚了整個(gè)濱河市莉恼,隨后出現(xiàn)的幾起案子义矛,更是在濱河造成了極大的恐慌派诬,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圈纺,死亡現(xiàn)場(chǎng)離奇詭異秦忿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蛾娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門灯谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蛔琅,你說(shuō)我怎么就攤上這事胎许。” “怎么了罗售?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵呐萨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我莽囤,道長(zhǎng)谬擦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任朽缎,我火速辦了婚禮惨远,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘话肖。我一直安慰自己北秽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布最筒。 她就那樣靜靜地躺著贺氓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪床蜘。 梳的紋絲不亂的頭發(fā)上辙培,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音邢锯,去河邊找鬼扬蕊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丹擎,可吹牛的內(nèi)容都是我干的尾抑。 我是一名探鬼主播歇父,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼再愈!你這毒婦竟也來(lái)了榜苫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翎冲,失蹤者是張志新(化名)和其女友劉穎垂睬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體府适,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年肺樟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檐春。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡么伯,死狀恐怖疟暖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情田柔,我是刑警寧澤俐巴,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站硬爆,受9級(jí)特大地震影響欣舵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缀磕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一缘圈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袜蚕,春花似錦糟把、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至凿傅,卻和暖如春缠犀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聪舒。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工夭坪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人过椎。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓室梅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亡鼠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,150評(píng)論 30 470
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛(ài)閱讀 1,984評(píng)論 0 7
  • 多線程赏殃、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景间涵。SDWebImage的原...
    LZM輪回閱讀 2,007評(píng)論 0 12
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用仁热,...
    LZM輪回閱讀 3,315評(píng)論 0 6
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,356評(píng)論 0 35