1无午,QQ上的消息拖動變形的實現(xiàn):
上面顯示了數(shù)字土砂,如果可以點擊用UIButton實現(xiàn)乏悄。重寫UIButton龙亲,添加一個pan手勢陕凹,在自身的原來位置添加的一個UIView originView悍抑,作為起始點,插入到superView的底部杜耙,拖動時算出距離搜骡,根據(jù)距離大小改變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模式都能執(zhí)行嚎花,這兩個模式都標記了commonMode的屬性寸痢。
5,看ios系統(tǒng)的市場占有率:
https://developer.apple.com/support/app-store/
6紊选,創(chuàng)建常駐線程:
http://www.reibang.com/p/bc04369ce69d.
在thread的事件中給當前runloop添加一個source啼止。[currentRunloop run];
7,多線程使用GCD和NSOperationQunue而不直接使用NSTread的原因:
多線程使用GCD和NSOperationQunue而不直接使用NSTread不僅僅是因為操作的便捷兵罢,主要是因為使用NSTread無法保證總的線程數(shù)献烦,多線程能夠高效運行與CPU的核數(shù)息息相關(guān)。單個使用NSTread沒問題趣些,但總體無法確狈戮#總線程的個數(shù),會造成一個連續(xù)不斷的扇出的問題坏平。GCD和NSOperationQunue底層維持了一個線程池拢操,能夠根據(jù)CPU的性能,合理分配線程舶替。在使用它們時不必關(guān)系線程令境,而是抽象成任務(wù)和隊列。
8顾瞪,-[UIKeyboardLayoutStar release]: message sent to deallocated instance ?從后臺切到前臺就會崩潰舔庶,并報這個錯誤,百度發(fā)現(xiàn)是同時替換可變和不可變數(shù)組的objectAtIndex:方法就會報錯陈醒,單獨替換不可變的方法不會.
9惕橙,很多時候傳商品訂單id到后臺,后臺都需要傳其他的類型到后臺才能判斷是什么類型的訂單钉跷,這樣的問題可能是訂單沒有系統(tǒng)設(shè)計造成的弥鹦,訂單的應(yīng)該是包含訂單類型,用戶的基本信息的,這樣便于查詢(據(jù)說目前項目的訂單id沒有這樣的功能彬坏,但是訂單編號是有的,不知道為什么要做兩個唯一標示)朦促。
10,GCD同步異步是相對函數(shù)而言栓始,串行還是并發(fā)是對隊列而言的务冕,異步有在調(diào)用線程之外開新線程的能力,如果同步只能在調(diào)用線程或主線程中幻赚。主線程中調(diào)用在主隊列中調(diào)用同步gcd函數(shù)禀忆,會形成死鎖。但子線程中調(diào)用主隊列的同步函數(shù)不會落恼。具體見:https://github.com/leixiang1986/DailyExercise.git.
11油湖,- (void)setSelected:(BOOL)selected animated:(BOOL)animated;在初始化或刷新(滑動)领跛,會默認調(diào)用一遍,selected為NO撤奸,點擊的才會設(shè)置selected為YES吠昭。外部可以通過[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:(UITableViewScrollPositionNone)];方法來選中。不用設(shè)置model的select屬性來傳遞狀態(tài).
12胧瓜,控制器A present控制器帶有導(dǎo)航控制器的B矢棚,在不論是A,B府喳, B.navigationController 都能dismiss掉B蒲肋。并且B的parentController是B的導(dǎo)航控制器,B的導(dǎo)航控制器的ParentController為nil钝满。
13兜粘,gcd柵欄函數(shù)只能用于自定義的并發(fā)多列,全局并發(fā)隊列無效弯蚜!
14,如果Could not insert new outlet connection: 可能是類名不一致孔轴,也可能是修改了類名,雖然與xib類一致還是報錯碎捺,可以刪除 /Users/leixiang/Library/Developer/Xcode/DerivedData/?
15,有些時候用靜態(tài)變量比用枚舉更合適路鹰,例如,我的界面店主登錄時情況有A1,A2,A3,A4四個cell。在店員登錄時只有A3收厨,A4兩個cell晋柱,如果用枚舉,判斷點擊事件時诵叁,index就要根據(jù)不同情況雁竞,進行判斷,如果在cell A3時是消息黎休,需要顯示消息數(shù)量浓领,在獲取cell時也要判斷登錄者的身份玉凯,定死index是2,還是0。但是如果是字符串的常量联贩,那么點擊事件時漫仆,判斷數(shù)據(jù)源數(shù)組的title是否與常量(a1)匹配。設(shè)置消息的數(shù)量泪幌,獲取cell的index時盲厌,可以通過數(shù)據(jù)源的objectAtIndex方法,判斷出消息cell(a3)的index是0還是3祸泪,不用因為業(yè)務(wù)條件的改變發(fā)生數(shù)據(jù)錯亂.?