2017三月

1,QQ上的消息拖動變形的實現:

上面顯示了數字,如果可以點擊用UIButton實現。重寫UIButton,添加一個pan手勢,在自身的原來位置添加的一個UIView originView,作為起始點,插入到superView的底部,拖動時算出距離,根據距離大小改變originView的大小。然后通過貝塞爾曲線(控制點在originView的邊緣與中心線平行的中點上)繪制CAShapLayer插入到superView的底層中。

2,不對#號編碼:(字符集中是需要編碼的字符集合)

- (NSString *)concatenatedCoding:(NSString *)urlPath

{

NSCharacterSet *uRLCombinedCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@" \"+%<>[\\]^`{|}/"] invertedSet];

urlPath = [urlPath stringByAddingPercentEncodingWithAllowedCharacters:uRLCombinedCharacterSet];

return urlPath;

}

3,得到文字的拉丁字母(漢字拼音):

NSString *input = @"Hello! こんにちは! ??????! ?????! 您好!";

NSString *processing = [input stringByApplyingTransform:NSStringTransformToLatin reverse:NO];

processing = [processing stringByApplyingTransform:NSStringTransformStripDiacritics reverse:NO];

NSArray*output = [processing.localizedLowercaseString

componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSLog(@"%@", output);

// ["hello!", "kon'nichiha!", "swasdi!", "mrhba!", "nin", "hao!"]

4,runloop:

主要的模式有DefaultMode和TrackingRunLoopMode,在滑動時TrackingRunLoopMode模式,在加入commonMode時,在DefaultMode和TrackingRunLoopMode模式都能執行,這兩個模式都標記了commonMode的屬性。

5,看ios系統的市場占有率:

https://developer.apple.com/support/app-store/

6,創建常駐線程:

http://www.lxweimin.com/p/bc04369ce69d.

在thread的事件中給當前runloop添加一個source。[currentRunloop run];

7,多線程使用GCD和NSOperationQunue而不直接使用NSTread的原因:

多線程使用GCD和NSOperationQunue而不直接使用NSTread不僅僅是因為操作的便捷,主要是因為使用NSTread無法保證總的線程數,多線程能夠高效運行與CPU的核數息息相關。單個使用NSTread沒問題,但總體無法確保總線程的個數,會造成一個連續不斷的扇出的問題。GCD和NSOperationQunue底層維持了一個線程池,能夠根據CPU的性能,合理分配線程。在使用它們時不必關系線程,而是抽象成任務和隊列。

8,-[UIKeyboardLayoutStar release]: message sent to deallocated instance ?從后臺切到前臺就會崩潰,并報這個錯誤,百度發現是同時替換可變和不可變數組的objectAtIndex:方法就會報錯,單獨替換不可變的方法不會.

9,很多時候傳商品訂單id到后臺,后臺都需要傳其他的類型到后臺才能判斷是什么類型的訂單,這樣的問題可能是訂單沒有系統設計造成的,訂單的應該是包含訂單類型,用戶的基本信息的,這樣便于查詢(據說目前項目的訂單id沒有這樣的功能,但是訂單編號是有的,不知道為什么要做兩個唯一標示)。

10,GCD同步異步是相對函數而言,串行還是并發是對隊列而言的,異步有在調用線程之外開新線程的能力,如果同步只能在調用線程或主線程中。主線程中調用在主隊列中調用同步gcd函數,會形成死鎖。但子線程中調用主隊列的同步函數不會。具體見:https://github.com/leixiang1986/DailyExercise.git.

11,- (void)setSelected:(BOOL)selected animated:(BOOL)animated;在初始化或刷新(滑動),會默認調用一遍,selected為NO,點擊的才會設置selected為YES。外部可以通過[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:(UITableViewScrollPositionNone)];方法來選中。不用設置model的select屬性來傳遞狀態.

12,控制器A present控制器帶有導航控制器的B,在不論是A,B, B.navigationController 都能dismiss掉B。并且B的parentController是B的導航控制器,B的導航控制器的ParentController為nil。

13,gcd柵欄函數只能用于自定義的并發多列,全局并發隊列無效!

14,如果Could not insert new outlet connection: 可能是類名不一致,也可能是修改了類名,雖然與xib類一致還是報錯,可以刪除 /Users/leixiang/Library/Developer/Xcode/DerivedData/?

15,有些時候用靜態變量比用枚舉更合適,例如,我的界面店主登錄時情況有A1,A2,A3,A4四個cell。在店員登錄時只有A3,A4兩個cell,如果用枚舉,判斷點擊事件時,index就要根據不同情況,進行判斷,如果在cell A3時是消息,需要顯示消息數量,在獲取cell時也要判斷登錄者的身份,定死index是2,還是0。但是如果是字符串的常量,那么點擊事件時,判斷數據源數組的title是否與常量(a1)匹配。設置消息的數量,獲取cell的index時,可以通過數據源的objectAtIndex方法,判斷出消息cell(a3)的index是0還是3,不用因為業務條件的改變發生數據錯亂.?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎樣m閱讀 1,302評論 0 1
  • 一、深復制和淺復制的區別? 1、淺復制:只是復制了指向對象的指針,即兩個指針指向同一塊內存單元!而不復制指向對象的...
    iOS_Alex閱讀 1,424評論 1 27
  • Object C中創建線程的方法是什么?如果在主線程中執行代碼,方法是什么?如果想延時執行代碼、方法又是什么? 1...
    AlanGe閱讀 1,792評論 0 17
  • 2016已經成為過去式了 接下來的 2017有沒有什么新的想法呢? 答案,肯定是有的,我想考試不掛科,我想家人平平...
    姑娘加油qc閱讀 346評論 6 3