µ±
iOS7 ¸Õ·¢²¼µÄʱºò£¬È«ÊÀ½çµÄÆ»¹û¿ª·¢ÈËÔ±¶¼Á¢Âí³¢ÊÔ×ÅÈ¥±àÒëËûÃǵÄapp£¬½Ó×ÅÔÙ»¨ÉÏÊýÔµÄʱ¼äÀ´ÐÞ¸´ÈκγöÏֵĹÊÕÏ£¬ÉõÖÁÖØ×öapp¡£ÕâÑùµÄ½á¹û£¬Ê¹µÃÈËÃǸù±¾ÎÞϾȥ̽¾¿
iOS7 Ëù´øÀ´µÄж«Î÷¡£Ò»Ð©Ã÷ÏÔ¶øÏ¸Î¢µÄ¸üУ¬±ÈÈç˵[NSArray firstObject]£¬Õâ¸ö·½·¨¿É×·Ëݵ½
iOS4 ʱ´ú£¬ÏÖÔÚ±»ÌáΪ¹«ÓÐAPI£¬³ý´ËÖ®Í⣬»¹ÓкܶàÒþ²ØµÄÌØÐÔµÈ×ÅÎÒÃÇÈ¥ÍÚ¾ò¡£
ƽ»¬µÈëµ³ö¶¯»
ÎÒÕâÀïÒªÌÖÂ۵IJ¢·Çеĵ¯ÐÔ¶¯»APIs »òÕß UIDynamics£¬¶øÊÇһЩ¸üϸ΢µÄ¶«Î÷¡£CALayerÔö¼ÓÁËÁ½¸öз½·¨£ºallowsGroupOpacityºÍallowsEdgeAntialiasing¡£ÏÖÔÚ£¬×鲻͸Ã÷¶È(group
opacity)²»ÔÙÊÇʲôÐÂÏʵĶ«Î÷ÁË¡£iOS»á¶à´ÎʹÓôæÔÚÓÚ Info.plist ÖеļüUIViewGroupOpacity²¢¿ÉÔÚÓ¦ÓóÌÐò·¶Î§ÄÚÆôÓûò½ûÓÃËü¡£¶ÔÓÚ´ó¶àÊýapps¶øÑÔ£¬Õ⣨Òë×¢£ºÆôÓ㩲¢·ÇËùÆÚÍûµÄ£¬ÒòΪËü»á½µµÍÕûÌåÐÔÄÜ¡£ÔÚ
iOS7 ÖУ¬Óà SDK7 ËùÁ´½ÓµÄ³ÌÐò£¬ÕâÏîÊôÐÔĬÈÏÊÇÆôÓõġ£µ±Ëü±»ÆôÓÃʱ£¬Ò»Ð©¶¯»½«»á±äµÃ²»Á÷³©£¬ËüÒ²¿ÉÒÔÔÚlayer²ãÉϱ»¿ØÖÆ¡£
Ò»¸öÓÐȤµÄϸ½Ú£¬Èç¹ûallowsGroupOpacityÆôÓõϰ£¬_UIBackdropView£¨ÔÚUIToolbar»òÕßUIPopoverViewÖеı³¾°ÊÓͼ£©²»ÄÜ¶ÔÆäÄ£ºý½øÐж¯»´¦Àí£¬ËùÒÔµ±Äã×öÒ»¸öalphaת»»Ê±£¬Äã¿ÉÄÜ»áÁÙʱ½ûÓÃÕâÏîÊôÐÔ¡£ÒòΪÕâ»á½µµÍ¶¯»ÌåÑ飬Äã¿ÉÒÔ»ØÍ˵½¾ÉµÄ·½Ê½È»ºóÔÚ¶¯»ÆÚ¼äÁÙʱÆôÓÃshouldRasterize¡£±ðÍüÁËÉèÖÃÊʵ±µÄrasterizationScale£¬·ñÔòÔÚretinaµÄÉ豸ÉÏÕâЩÊÓͼ»á³É¾â³Ý×´¡£
Èç¹ûÄãÏëÒª¸´ÖÆµÄ Safari ÏÔʾËùÓÐÑ¡ÏʱµÄ¶¯»£¬ÄÇô±ßÔµ¿¹¾â³ÝÊôÐÔ½«±äµÃ·Ç³£ÓÐÓá£
×èÈû¶¯»
Ò»¸öСµ«·Ç³£ÓÐÓõÄз½·¨[UIView performWithoutAnimation:]¡£ËüÊÇÒ»¸ö¼òµ¥µÄ·â×°£¬Ïȼì²é¶¯»µ±Ç°ÊÇ·ñÆôÓã¬È»ºó½ûÖ¹¶¯»£¬Ö´ÐпéÓï¾ä£¬×îºóÖØÐÂÆôÓö¯»¡£Ò»¸öÐèҪ˵Ã÷µÄµØ·½ÊÇ£¬Ëü²¢²»»á×èÈû»ùÓÚ
CoreAnimation µÄ¶¯»¡£Òò´Ë£¬²»Óü±ÓÚ½«ÄãµÄ·½·¨µ÷Óôӣº
[CATransaction begin]; [CATransaction setDisableActions:YES]; view.frame = CGRectMake(...); [CATransaction commit]; |
Ìæ»»Îª£º
[UIView performWithoutAnimation:^{ view.frame = CGRectMake(...); }]; |
µ«ÊÇ£¬¾ø´ó¶àÊýÇé¿öÏÂÕâÑùÒ²Äܹ¤×÷µÄºÜºÃ£¬Ö»ÒªÄã²»Ö±½Ó´¦ÀíCALayers¡£
iOS7 ÖУ¬ÎÒÓкܶà´úÂë·¾¶£¨Ö÷ÒªÊÇ UITableViewCells£©ÐèÒª¶îÍâµÄ±£»¤£¬·ÀÖ¹ÒâÍâµÄ¶¯»£¬ÀýÈ磬Èç¹ûÒ»¸öµ¯´°µÄ´óСµ÷ÕûÁË£¬ÄÇôͬʱÏÔʾÖеıíÊÓͼ½«ÒòΪ¸ß¶ÈµÄ±ä»¯¶ø¼ÓÔØÐµÄcell¡£ÎÒͨ³£µÄ×ö·¨Êǽ«Õû¸ö
layoutSubviews µÄ´úÂë°üÔúµ½Ò»¸ö¶¯»¿éÖУº
- (void)layoutSubviews { // Otherwise the popover animation could leak into our cells on iOS 7 legacy mode. [UIView performWithoutAnimation:^{ [super layoutSubviews]; _renderView.frame = self.bounds; }]; } |
´¦Àí³¤±íÊÓͼ
UITableView ·Ç³£¿ìËÙ¸ßЧ£¬³ý·ÇÄ㿪ʼʹÓÃtableView:heightForRowAtIndexPath:£¬Ëü»á¿ªÊ¼ÎªÄã±íÖÐÈÎÒâÔªËØµ÷Óô˷½·¨£¬¼´±ãûÓпÉÊÓ¶ÔÏ󣬾ͱÈÈçÆäÄÚÔÚµÄUIScrollViewÖ»ÊÇÈ¥»ñÈ¡ÕýÈ·µÄcontentSize¡£´ËǰÓÐһЩ±äͨ·½·¨£¬µ«¶¼²»ºÃÓá£iOS7
ÖУ¬Æ»¹û¹«Ë¾ÖÕÓÚ³ÐÈÏÕâÒ»ÎÊÌ⣬²¢Ìí¼ÓtableView:estimatedHeightForRowAtIndexPath:£¬Õâ¸ö·½·¨ÑÓ³ÙÁËʵ¼Ê¹ö¶¯Ê±¼ä³É±¾µÄ´ó²¿·Ö¡£Èç¹ûÄã²»ÖªµÀÒ»¸öcellµÄ´óС£¬·µ»ØUITableViewAutomaticDimension¼´¿É¡£
¶ÔÓÚ½ÚÍ·/⣨section headers/footers£©£¬ÏÖÔÚÒ²ÓÐÀàËÆµÄAPIÁË¡£
UISearchDisplayController
Æ»¹ûµÄ search controller ʹÓÃÁËеļ¼ÇÉÀ´¼ò»¯Òƶ¯ search
bar µ½ navigation bar µÄ¹ý³Ì¡£ÆôÓà displaysSearchBarInNavigationBar
¾Í¿ÉÒÔÁË£¨³ý·ÇÄ㻹ҪÓõ½ scope bar£¬ÎÒÖ»ÄÜ˵ÄãÕæ²»ÐÒ£©¡£ÎÒµ¹ÊǺÜϲ»¶Õâô×ö£¬µ«±È½ÏÒź¶µÄÊÇ£¬iOS7
É쵀 UISearchDisplayController Ã²ËÆ±»´Ý²ÐµÄ±È½ÏÑÏÖØ£¬ÓÈÆäÊÇiPad¡£Æ»¹û¹«Ë¾¿´ÉÏÈ¥ÏñÊÇûʱ¼ä´¦ÀíÕâ¸öÎÊÌâµÄÑù×Ó£¨ÔÎÄ£ºApple
seems to have run out of time£©£¬¶ÔÓÚÏÔʾµÄËÑË÷½á¹û²¢²»»áÒþ²ØÊµ¼ÊµÄ±íÊÓͼ¡£ÔÚ
iOS7 ֮ǰ£¬ÕⲢûÓÐÎÊÌ⣬µ«ÊÇÏÖÔÚ searchResultsTableView ÓÐÒ»¸ö͸Ã÷µÄ±³¾°É«£¬Ê¹Ëü¿´ÉÏÈ¥Ï൱Ôã¸â¡£×÷ΪһÖÖ±äͨ·½·¨£¬Äã¿ÉÒÔÉèÖò»Í¸Ã÷É«»òÕßÈ¡µÀÓÚ¸»ÓÚ¼¼ÇɵÄÊÖ¶ÎÀ´»ñµÃÄãËùÆÚÍûµÄ¡£¹ØÓÚÕâ¸ö¿Ø¼þ»á³öÏÖ¸÷ÖÖ¸÷ÑùµÄ½á¹û£¬µ±Ê¹ÓÃdisplaysSearchBarInNavigationBarʱÉõÖÁ²»»áչʾËÑË÷±íÊÓͼ¡£
ÄãµÄ½á¹û¿ÉÄÜÓÐËù²»Í¬£¬µ«ÎÒÊÇʹÓÃÁËһЩÊÖ¶ÎÀ´ÈÃdisplaysSearchBarInNavigationBar¹¤×÷µÄ£º
- (void)restoreOriginalTableView { if (PSPDFIsUIKitFlatMode() && self.originalTableView) { self.view = self.originalTableView; } } - (UITableView *)tableView { return self.originalTableView ?: [super tableView]; } - (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { // HACK: iOS 7 requires a cruel workaround to show the search table view. if (PSPDFIsUIKitFlatMode()) { if (!self.originalTableView) self.originalTableView = self.tableView; self.view = controller.searchResultsTableView; controller.searchResultsTableView.contentInset = UIEdgeInsetsZero; // Remove 64 pixel gap } } - (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView { [self restoreOriginalTableView]; } |
ÕâÀ±ðÍüÁËÔÚviewWillDisappearÖе÷ÓÃrestoreOriginalTableView£¬·ñÔò»á·¢ËÍcrash¡£
¼ÇסÕâÊÇΨһµÄ½â¾ö°ì·¨£»¿ÉÄÜÓв»ÉÙ¼¤½øµÄ·½·¨²»Ìæ»»ÊÓͼ±¾Éí£¬µ«Õâ¸öÎÊÌâȷʵӦ¸ÃÓÉÆ»¹û¹«Ë¾À´ÐÞ¸´¡££¨TODO:
RADAR!£©
·ÖÒ³
UIWebView ʹÓÃÁËеļ¼ÇÉÀ´×Ô¶¯·ÖÒ³´øpaginationModeµÄÍøÕ¾¡£ÓÐÒ»´ó¶ÑÓë´Ë¹¦ÄÜÏà¹ØµÄÐÂÊôÐÔ£º
@property (nonatomic) UIWebPaginationMode paginationMode NS_AVAILABLE_IOS(7_0); @property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode NS_AVAILABLE_IOS(7_0); @property (nonatomic) CGFloat pageLength NS_AVAILABLE_IOS(7_0); @property (nonatomic) CGFloat gapBetweenPages NS_AVAILABLE_IOS(7_0); @property (nonatomic, readonly) NSUInteger pageCount NS_AVAILABLE_IOS(7_0); |
ÏÖÔÚ¶øÑÔ£¬ËäÈ»Õâ¿ÉÄܲ¢·Ç¶ÔÓÚ´ó¶àÊýÍøÕ¾¶¼ÓÐÓ㬵«Ëü¿Ï¶¨ÊÇÉú³É¼òµ¥µÄµç×ÓÊéÔĶÁÆ÷»òÏÔʾÎı¾µÄÒ»ÖÖ¸üºÃµÄ·½Ê½¡£¼ÓµãÀÖ×ӵϰ£¬Çë³¢ÊÔ½«ËüÉèÖÃΪUIWebPaginationModeBottomToTop¡£
»á·ÉµÄ Popovers
ÏëÖªµÀΪʲôÄãµÄpopovers·èÁËÒ»Ñùµ½´¦ÂÒ·É£¿ÔÚUIPopoverControllerDelegateÐÒéÖÐÓÐÒ»¸öеĴúÀí·½·¨Ê¹ÄãÄÜ¿ØÖÆËü£º
- (void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView **)view |
µ±popoverêµãÊÇÖ¸ÏòÒ»¸öUIBarButtonItemʱ£¬UIPopoverController»áÓÐһЩ¶¯×÷£¬µ«Èç¹ûÄãÈÃËüÔÚÒ»¸öview»òÕßrectÖÐÏÔʾ£¬Äã¿ÉÄܾÍÐèҪʵÏÖ´Ë·½·¨²¢Õý³£·µ»Ø¡£Ò»¸ö»¨·ÑÁËÎÒÏ൱³¤µÄʱ¼äÀ´ÑéÖ¤µÄÎÊÌ⡪¡ªÈç¹ûÄãͨ¹ý¸Ä±äpreferredContentSizeÀ´¶¯Ì¬µ÷ÕûÄãµÄpopovers£¬ÄÇôÕâ¸ö·½·¨¾ÍÌØ±ðÒªÇóµÃÒÔʵÏÖ¡£Æ»¹û¹«Ë¾ÏÖÔڶԸıäpopovers´óСµÄÇëÇó¸üÑϸñ£¬Èç¹ûûÓÐÔ¤Áô×ã¹»µÄ¿Õ¼ä£¬popover½«»áµ½´¦Òƶ¯¡£
¼üÅÌÖ§³Ö
Æ»¹û¹«Ë¾²»Ö»ÎªÎÒÃÇÌṩÁËȫеÄframeworkÓÃÓÚÓÎÏ·¿ØÖÆÆ÷£¬ËüÒ²¸øÁËÎÒÃÇÕâЩ¼üÅ̰®ºÃÕßһЩÌáʾ£¡Äã»á·¢ÏÖж¨ÒåµÄ¹«ÓüüÏñ
UIKeyInputEscape »ò UIKeyInputUpArrow£¬¿ÉÒÔʹÓÃËùÓÐÐ嵀 UIKeyCommand
Àà½Ø²é¡£ÔÚ iOS7 ֮ǰ£¬Ö»ÄÜͨ¹ýһЩÄÑÒÔÑÔ±íµÄÊÖ¶ÎÀ´´¦Àí¼üÅÌÃüÁÏÖÔÚ£¬¾ÍÈÃÎÒÃÇ²ÙÆðÀ¶ÑÀ¼üÅÌÊÔÊÔ¿´ÎÒÃÇÄÜÓÃÕâ¸ö×öʲô£¡
¿ªÊ¼Ö®Ç°£¬ÄãÐèÒª¶ÔÔðÈÎÕßÁ´ÓиöÁ˽⡣ÄãµÄ UIApplication ¼Ì³Ð×Ô UIResponder£¬UIView
ºÍ UIViewController Ò²ÊÇÈç´Ë¡£Èç¹ûÄã´¦Àí¹ý UIMenuItem ²¢ÇÒûÓÐʹÓÃÎҵĻùÓÚ¿éµÄ°ü×°µÄ»°£¬ÄÇôÄãÒѾÁ˽âÁËÕâЩ¡£Ê¼þÏȱ»·¢Ë͵½×îÉϲãµÄÏìÓ¦Õߣ¬È»ºóÒ»¼¶¼¶ÍùÏ´«µÝÖ±µ½
UIApplication ¡£ÎªÁ˲¶»ñ°´¼üÃüÁÄãÐèÒª¸æËßϵͳÄã¹ØÐÄÄÄЩ¼üÃüÁ¶ø²»ÊÇÈ«²¶»ñ£©¡£ÎªÁËÍê³ÉÕâ¸ö£¬ÄãÐèÒªÖØÐ´keyCommandsÕâ¸öÐÂÊôÐÔ£º
- (NSArray *)keyCommands { return @[[UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(searchKeyPressed:)]]; } - (void)searchKeyPressed:(UIKeyCommand *)keyCommand { // Respond to the event } |

ÏÖÔڿɱðÌ«¼¤¶¯£¬ÐèҪעÒâµÄÊÇ£¬Õâ¸ö·½·¨Ö»ÔÚ¼üÅ̿ɼûʱÓÐЧ£¨±ÈÈçÓÐÀàËÆ UITextView ÕâÑùµÄ¶ÔÏó×÷ΪµÚÒ»ÏìÓ¦Õßʱ£©¡£¶ÔÓÚÈ«¾ÖÈȼü£¬ÄãÈÔÈ»ÐèÒªÓÃÉÏÃæµÄ·½·¨¡£³ýÈ´ÄÇЩ£¬Õâ¸ö·¾¶»¹ÊǺÜÓÅÑŵġ£²»Òª¸²¸ÇÀàËÆ
cmd-V ϵͳµÄ¿ì½Ý¼ü£¬Ëü»á±»×Ô¶¯Ó³ÉäΪճÌù¹¦ÄÜ¡£
»¹ÓÐһЩеÄÔ¤¶¨ÒåµÄÏìÓ¦ÐÐΪÈ磺
- (void)increaseSize:(id)sender NS_AVAILABLE_IOS(7_0); - (void)decreaseSize:(id)sender NS_AVAILABLE_IOS(7_0); |
ËüÃÇ·Ö±ð¶ÔÓ¦×Å cmd+ ºÍ cmd- ÃüÁÓÃÀ´·Å´ó/ËõСÄÚÈÝ¡£
Æ¥Åä¼üÅ̱³¾°
Æ»¹û¹«Ë¾ÖÕÓÚ¹«¿ªÁË UIInputView£¬ÆäÖÐÌṩÁËÒ»ÖÖ·½Ê½¡ª¡ªÊ¹ÓÃUIInputViewStyleKeyboardÀ´Æ¥Åä¼üÅÌÑùʽ¡£ÕâʹµÃÄã¿ÉÒÔ±àд×Ô¶¨ÒåµÄ¼üÅÌ»òÕß´øÄ¬ÈÏÑùʽµÄĬÈϼüÅÌÀ©Õ¹£¨¹¤¾ßÌõ£©¡£Õâ¸öÀàÒÔǰ¾Í´æÔÚÁË£¬²»¹ýÏÖÔÚÎÒÃÇÖÕÓÚ¿ÉÒÔÈÆ¹ý˽ÓÐAPIµÄ·½Ê½À´Ê¹ÓÃËüÁË¡£
Èç¹û UIInputView ÊÇÒ»¸ö inputView »òÕß inputAccessoryView
µÄ¸ùÊÓͼ£¬Ëü½«Ö»ÏÔʾһ¸ö±³¾°£¬·ñÔòËü½«ÊÇ͸Ã÷µÄ¡£Òź¶µÄÊÇ£¬Õâ²¢²»ÄÜÈÃÄãʵÏÖÒ»¸öδÌî³äµÄ·ÖÀë̬µÄ¼üÅÌ£¬µ«ËüÈÔÈ»±ÈÓÃÒ»¸ö¼òµ¥µÄ
UIToolbar ÒªºÃ¡£ÎÒ»¹Ã»¿´µ½Æ»¹ûÔںδ¦Ê¹ÓÃÕâ¸öÐÂAPI£¬Ã²ËÆËüÖ»×÷Ϊһ¸ö UIToolbar ʹÓÃÔÚ
Safari ÉÏ¡£
Á˽âÄãµÄÍøÂç
ËäÈ»ÔçÔÚ iOS4 µÄʱºò£¬¹ØÓÚÍøÂçÐÅÏ¢µÄ´ó²¿·ÖÒѾÔÚ CTTelephony
±©Â¶ÁË£¬µ«Ëüͨ³£Ö»ÓÃÓÚÌØ¶¨³¡¾°²¢·ÇÊ®·ÖÓÐÓá£iOS7 ÖУ¬Æ»¹û¹«Ë¾ÎªÆäÌí¼ÓÁËÒ»¸ö·½·¨£¬ÆäÖÐ×îÓÐÓõģºcurrentRadioAccessTechnology¡£Õâ¸öʹÄãÄÜÖªÏþÊÖ»úÊÇ´¦ÓÚ½ÏÂýµÄGPRS»¹ÊǸßËÙµÄLTE»òÕß½éÓÚÆäÖС£Ä¿Ç°»¹Ã»Óз½·¨µÃµ½Á¬½ÓËÙ¶È£¨µ±È»ÊÖ»ú±¾ÉíÒ²ÎÞ·¨»ñÈ¡Õâ¸ö£©£¬µ«ÊÇÕâ×ãÒÔÓÃÀ´ÓÅ»¯Ò»¸öÏÂÔØ¹ÜÀíÆ÷£¬ÈÃÆäÔÚEDGEϲ»Óó¢ÊÔͬʱȥÏÂÔØ6ÕÅͼƬÁË¡£
ÏÖÔÚ»¹Ã»ÓÐcurrentRadioAccessTechnologyµÄÏà¹ØÎĵµ£¬Òò´Ë´æÔÚһЩ²»Õý¹æ»òÕß´íÎóµÄÓ÷¨¡£µ±ÄãÏëÒª»ñÈ¡µ±Ç°ÍøÂçÐźÅÖµ£¬ÄãÓ¦µ±×¢²áÒ»¸öCTRadioAccessTechnologyDidChangeNotification֪ͨ¶ø²»Ó¦¸ÃÈ¥ÂÖѯÕâ¸öÊôÐÔ¡£ÎªÁË»ñÈ¡ÕâЩ֪ͨ£¬ÄãÐèҪʹÓÃCTTelephonyNetworkInfoµÄÒ»¸öʵÀý£¬×¢Òâ²»ÒªÔÚ֪ͨÖд´½¨
CTTelephonyNetworkInfo µÄʵÀý£¬·ñÔò»á crash¡£
ÔÚÕâ¸ö¼òµ¥µÄÀý×ÓÖУ¬ÎÒÔÚblockÖв¶»ñ²¢³ÖÓÐÁË telephonyInfo£¬´ó¼Ò¿ÉÒÔºöÂÔÕâ¸ö£º
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new]; NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology); [NSNotificationCenter.defaultCenter addObserverForName:CTRadioAccessTechnologyDidChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) { NSLog(@"New Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology); }]; |
µ±ÊÖ»ú´Óedge»·¾³µ½3G£¬logÊä³öÓ¦¸ÃÏñÕâÑù£º
iOS7Tests[612:60b] Current Radio Access Technology: CTRadioAccessTechnologyEdge iOS7Tests[612:1803] New Radio Access Technology: (null) iOS7Tests[612:1803] New Radio Access Technology: CTRadioAccessTechnologyHSDPA |
Æ»¹ûµ¼³öÁËËùÓÐ×Ö·û´®·ûºÅ£¬Òò´Ë¿ÉÒԺܼòµ¥µÄ±È½ÏºÍ¼ì²âµ±Ç°µÄÍøÂçÐÅÏ¢¡£
Core Foundation ºÍ Autorelease
Core FoundationÖгöÏÖÁËÒ»¸öÐµķ½·¨£¬Ëü±»ÓÃÓÚ˽Óе÷ÓÃÒÑÓÐÊýÄêʱ¼ä£º
CFTypeRef CFAutorelease(CFTypeRef CF_RELEASES_ARGUMENT arg) |
Ëüȷʵ×öÁËÄãËùÆÚÍûµÄÊ£¬ÈÃÈ˷ѽâµÄÊÇÆ»¹û»¨ÁËÕâô³¤Ê±¼ä²Å°ÑËü¹«¿ª¡£ARC
Ï£¬´ó¶àÊýÈËÔÚ´¦Àí·µ»Ø Core Foundation ¶ÔÏóʱÊÇͨ¹ýת»»³É¶ÔµÈµÄ NS ¶ÔÏóÀ´Íê³ÉµÄ£¬Èç
NSDictionary,¼´±ãËüÖ»ÊÇÒ»¸ö CFDictionaryRef È»ºó¼òµ¥µØ CFBridgingRelease()
¡£ÕâÑùͨ³£Ã»ÎÊÌ⣬³ý·ÇÄã·µ»ØµÄ¶ÔµÈ NS ¶ÔÏ󲻿ÉÓÃʱ£¬Èç CFBagRef¡£ÄãҪôʹÓà id£¬ÕâÑù»áʧȥÀàÐͰ²È«ÐÔ£¬ÒªÃ´Ä㽫ÄãµÄ·½·¨ÖØÃüÃûΪ
createMethod ²¢¿¼ÂÇËùÓеÄÄÚ´æÓïÒ壬×îºóʹÓà CFRelease¡£»¹ÓÐһЩÊֶΣ¬±ÈÈçÕâ¸ö£¬ÓÃ
non-ARC-file ±êǩȻºó±àÒ룬µ«ÖÕ¹éµÃʹÓÃCFAutorelease()¡£ÁíÍ⣺²»Òª±àдʹÓÃÆ»¹û¹«Ë¾ÃüÃû¿Õ¼äµÄ´úÂ룬ËùÓÐÕâЩ×Ô¶¨ÒåµÄ
CF-ºê½«À´¶¼»á±»´òÆÆµÄ¡£
ͼƬ½âѹËõ
µ±Í¨¹ý UIImage չʾһÕÅͼʱ£¬ÔÚÏÔʾ֮ǰÐèÒª½âѹËõ£¨³ý·ÇÔ´ÒѾÏñËØ»º´æÁË£©¡£¶ÔÓÚ
JPG/PNG ÎļþÕâ»áÕ¼ÓÃÏ൱¿É¹ÛµÄʱ¼ä²¢»áÔì³É¿¨¶Ù¡£iOS6 ÒÔǰ£¬Í¨³£ÊÇ´´½¨Ò»¸öλͼÉÏÏÂÎÄ£¬È»ºóÔÚÆäÖлͼÀ´½â¾ö¡££¨²Î¼û
AFNetworking ÈçºÎ´¦Àí£©¡£
iOS7 ¿ªÊ¼£¬Äã¿ÉÒÔʹÓÃkCGImageSourceShouldCacheImmediately:À´Ç¿ÖÆÍ¼Æ¬ÔÚ´´½¨Ê±Á¢¼´½âѹËõ£º
+ (UIImage *)decompressedImageWithData:(NSData *)data { CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); CGImageRef cgImage = CGImageSourceCreateImageAtIndex(source, 0,
(__bridge CFDictionaryRef)@{(id)kCGImageSourceShouldCacheImmediately: @YES}); UIImage *image = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); CFRelease(source); return image; } |
µ±ÎÒ¸Õ·¢ÏÖÕâÒ»µãʱȷʵºÜÐË·Ü£¬µ«ÊÂʵ²¢·ÇÈç´Ë¡£ÔÚÎҵIJâÊÔÖУ¬·¢ÏÖµ±¿ªÆôÁ˼´Ê±»º´æºóÐÔÄÜÓÐÃ÷ÏԵĽµµÍ¡£ÒªÃ´Õâ¸ö·½·¨ÊÇÔÚÖ÷Ïß³ÌÖе÷Óõ썲»Ì«¿ÉÄÜ£©£¬¸Ð¾õÉÏÐÔÄܸüÔ㣬ÒòΪËüÔÚ·½·¨copyImageBlockSetJPEGÖÐËø×¡ÁË£¬¶øÍ¬Ê±ÔÚÖ÷Ïß³ÌÖÐÔÚÏÔʾ·Ç¼ÓÃܵÄͼƬËùÖ¡£ÔÚÎҵijÌÐòÖУ¬ÎÒÔÚÖ÷Ïß³ÌÖмÓÔØÐ¡µÄÔ¤ÀÀͼ£¬ÔÚºǫ́Ïß³ÌÖмÓÔØ´óÐÍͼ£¬Ê¹ÓÃÁËkCGImageSourceShouldCacheImmediatelyºóССµÄ½âѹËõ×èÈûÁËÖ÷Ị̈߳¬Í¬Ê±ÔÚºǫ́´¦Àí´óÁ¿¿ªÏú°º¹óµÄ²Ù×÷¡£

»¹Óиü¶à¹ØÓÚͼƬ½âѹËõÏà¹ØµÄÈ´²»ÊÇ iOS7 ÖеÄж«Î÷£¬ÏñkCGImageSourceShouldCache£¬ËüÓÃÀ´¿ØÖÆÏµÍ³×Ô¶¯Ð¶ÔؽâѹËõµÄͼƬÊý¾ÝµÄÄÜÁ¦¡£È·±£Ä㽫ËüÉèÖÃΪYES£¬·ñÔòËùÓеŤ×÷¶¼½«Ã»ÓÐÒâÒå¡£ÓÐȤµÄÊÇ£¬Æ»¹ûÔÚ64bitÔËÐÐʱµÄϵͳÖн«kCGImageSourceShouldCacheµÄĬÈÏÖµ´Ó
NO ¸ÄΪÁË YES¡£
µÁ°æ¼ì²é
Æ»¹ûÌí¼ÓÁËÒ»¸ö·½Ê½£¬Í¨¹ý NSBunble ÉϵÄз½·¨appStoreReceiptURLÀ´ÆÀ¹ÀLionϵͳÉÏ
App Store µÄÊվݣ¬Í¬Ê±Ò²½«ÆäÒÆÖ²µ½ÁË iOS ÉÏ¡£ÕâʹµÃÄã¿ÉÒÔ¼ì²éÄãµÄÓ¦ÓÃÊÇÔÚ±»ºÏ·¨¹ºÂò»òÕßÒѾ±»ÆÆ½âÁË¡£¼ì²éÊվݻ¹ÓÐÒ»¸öÖØÒªµÄÔÒò£¬Ëü°üº¬Á˳õʼ¹ºÂòÈÕÆÚ£¬Õâµã¶ÔÓÚ°ÑÄãµÄÓ¦ÓôӸ¶·ÑÄ£ÐÍÇ¨ÒÆµ½Ãâ·Ñ+Ó¦ÓÃÄÚ¸¶·Ñ·½Ê½ºÜÓаïÖúÒâÒå¡£Äã¿ÉÒÔ¸ù¾ÝÕâ¸ö³õʼ¹ºÂòÈÕÆÚÀ´¾ö¶¨¶îÍâÄÚÈݶÔÓÚÄãµÄÓû§ÊÇÃâ·ÑµÄ»¹ÊÇÊշѵġ£
Êվݻ¹ÔÊÐíÄã¼ì²éÓ¦ÓóÌÐòÊÇ·ñͨ¹ýÅúÁ¿¹ºÂò¼Æ»®¹ºÂòÒÔ¼°¸ÃÐí¿ÉÖ¤ÊÇ·ñÈÔÓÐЧ£¬ÓÐÒ»¸öÃûΪSKReceiptPropertyIsVolumePurchaseµÄÊôÐÔÏÔʾÁ˸ÃÖµ¡£
µ±Äãµ÷ÓÃappStoreReceiptURLʱ£¬ÄãÐèÒªÌØ±ð×¢Ò⣬ÒòΪÔÚ iOS6 ÉÏ£¬Ëü»¹ÊÇÒ»¸ö˽ÓÐAPI£¬ÄãÓ¦¸ÃÔÚÓû§´úÂëÖÐÏȵ÷ÓÃdoesNotRecognizeSelector:£¬ÔÚµ÷ÓÃǰ¼ì²éÔËÐУ¨»ù´¡£©°æ±¾¡£ÔÚ¿ª·¢ÆÚ¼ä£¬Õâ¸ö·½·¨·µ»ØµÄ
URL ²»»áÊÇÖ¸ÏòÒ»¸öÎļþ¡£Äã¿ÉÄÜÐèҪʹÓà StoreKit µÄSKReceiptRefreshRequest£¬ÕâÒ²ÊÇ
iOS7 ÖеÄж«Î÷£¬ÓÃËüÀ´ÏÂÔØÖ¤Ê顣ʹÓÃÒ»¸öÖÁÉÙ¹ºÂò¹ýÒ»´ÎµÄ²âÊÔÓû§£¬·ñÔòËü½«Ã»·¨¹¤×÷£º
// Refresh the Receipt SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] init]; [request setDelegate:self]; [request start]; |
ÑéÖ¤ÊÕ¾ÝÐèÒª´óÁ¿µÄ´úÂë¡£ÄãÐèҪʹÓÃOpenSSLºÍÄÚǶµÄÆ»¹û¸ùÖ¤Ê飬²¢ÇÒÄ㻹ҪÁ˽âһЩ»ù±¾µÄ¶«Î÷ÏñÊÇÖ¤Êé¡¢PCKSÈÝÆ÷ÒÔ¼°ASN.1¡£ÕâÀïÓÐһЩÑùÀý´úÂ룬µ«ÊÇÄã²»Ó¦¸ÃÈÃËüÕâô¼òµ¥¡ª¡ª±ðÖ»ÊÇ¿½±´ÏÖÓеÄÑéÖ¤·½·¨£¬ÖÁÉÙ×öµãÐ޸ĻòÕß±àдÄã×Ô¼ºµÄ£¬ÄãÓ¦¸Ã²»Ï£ÍûÒ»¸öÆÕͨµÄ²¹¶¡³ÌÐò¾ÍÄÜÔÚÊýÃëÄÚÍß½âÄãµÄŬÁ¦°É¡£
Äã¾ø¶ÔÓ¦¸Ã¶Á¶ÁÆ»¹ûµÄÖ¸ÄÏ¡ª¡ªÑéÖ¤ Mac App É̵êÊվݣ¬ÕâÀïÃæµÄ´ó¶àÊý¶¼ÊÊÓÃÓÚ iOS¡£Æ»¹ûÔÚ WWDC2013
µÄ Session308 ¡°Using Receipts to Protect Your Digital
Sales¡± ÖÐÏêÊöÁË¡°Grand Unified Receipt¡±µÄ±ä¶¯¡£
Comic Sans MS
iOS7 ÖУ¬ÖÕÓÚÓ»ØÁË Comic Sans MS¡£ÏÖÔÚ£¬ËüÒÔ¿ÉÏÂÔØµÄ×ÖÌå±»Ìí¼Óµ½ iOS6 ÖУ¬µ«µ±Ê±µÄ×ÖÌåÁбíºÜÉÙÒ²²»¼ûµÃ¶àôÓÐȤ¡£ÔÚ
iOS7 ÖÐÆ»¹ûÌí¼ÓÁ˲»ÉÙ×ÖÌ壬°üÀ¨¡°famous¡±£¬ËüºÍ PT Sans »ò Comic Sans MS
ÓÐЩÀàËÆ¡£kCTFontDownloadableAttribute²¢Ã»ÓÐÔÚ iOS6 ÖÐÉùÃ÷£¬ËùÒÔ iOS7
ÒÔǰËü²¢²»ÕæÕý¿ÉÓ㬵«Æ»¹ûÈ·ÊÇÔÚ iOS6 µÄʱºò¾ÍÒѾ×öÁË˽ÓÐÉùÃ÷ÁË¡£

×ÖÌåÁбíÊǶ¯Ì¬±ä»¯µÄ£¬ÒÔºó¿ÉÄܾͻᷢÉú±ä¶¯¡£Æ»¹ûÔÚ Tech Note HT5484 ÖÐÂÞÁÐÁËһЩ¿ÉÓõÄ×ÖÌ壬µ«Õâ¸öÎĵµÒѾ¹ýʱÁË£¬Í¬Ê±Ò²²»ÄÜ·´Ó³
iOS7 µÄ±ä»¯¡£
ÕâÀïÏÔʾÁËÄã¸ÃÈçºÎ»ñȡһ¸öÓÃCTFontDescriptorRef±êʾ¿ÉÏÂÔØµÄ×ÖÌåÊý×飺
CFDictionary *descriptorOptions = @{(id)kCTFontDownloadableAttribute : @YES}; CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)descriptorOptions); CFArrayRef fontDescriptors = CTFontDescriptorCreateMatchingFontDescriptors(descriptor, NULL); |
ϵͳ²»»á¼ì²é×ÖÌåÊÇ·ñÒÑ´æÔÚÓÚ´ÅÅÌÉ϶ø½«Ö±½Ó·µ»ØÍ¬ÑùµÄÁÐ±í¡£ÁíÍ⣬Õâ¸ö·½·¨¿ÉÄÜ»áÆôÓÃÍøÂç²¢Ôì³É×èÈû£¬Äã²»Ó¦¸ÃÔÚÖ÷Ïß³ÌÖÐʹÓÃËü¡£
ʹÓÃÈçÏ»ùÓÚ¿éµÄ API À´ÏÂÔØ×ÖÌ壺
bool CTFontDescriptorMatchFontDescriptorsWithProgressHandler( CFArrayRef descriptors, CFSetRef mandatoryAttributes, CTFontDescriptorProgressHandler progressBlock) |
Õâ¸ö·½·¨ÄܲÙ×÷ÍøÂç²¢´«µÝÏÂÔØ½ø¶ÈÐÅÏ¢À´µ÷ÓÃÄãµÄprogressBlock·½·¨Ö±µ½ÏÂÔØ³É¹¦»òÕßʧ°Ü¡£²Î¿¼Æ»¹ûµÄ
DownloadFont ÑùÀý¿´ÈçºÎʹÓÃËü¡£
ÓÐһЩֵµÃ×¢ÒâµÄµØ·½£¬ÕâÀïµÄ×ÖÌåÖ»ÔÚµ±Ç°³ÌÐòÖÜÆÚÄÚÓÐЧ£¬Ï´ÎÔËÐн«±»ÖØÐÂÔØÈëÄÚ´æ¡£ÒòΪ×ÖÌå´æ·ÅÔÚ¹²Ïí¿Õ¼äÖУ¬Äã²»ÄÜÒÀÀµÓÚËüÃÇÊÇ·ñ¿ÉÓ᣺ÜÓпÉÄÜÒ²²»Äܱ£Ö¤µÄ˵£¬ÏµÍ³»áÇåÀíÕâ¸öĿ¼£¬»òÕßÄãµÄ³ÌÐò±»¿½±´µ½ÐµÄÉ豸»·¾³ÖУ¬¶øÕâʱÓÖûÓÐÕâ¸ö×ÖÌå´æÔÚ£¬Í¬Ê±µ±Ç°´¦ÓÚûÓÐÍøÂçµÄ»·¾³ÖС£ÔÚ
Mac »òÊÇÄ£ÄâÆ÷ÉÏ£¬ÄãÄܸù¾ÝkCTFontURLAttribute»ñµÃ×ÖÌåµÄ¾ø¶Ô·¾¶£¬¼ÓÔØËÙ¶ÈÒ²»áÌáÉý£¬µ«ÊÇÔÚ
iOS ÉÏÊDz»¿ÉÄܵģ¬ÒòΪÕâ¸öĿ¼ÔÚÄã³ÌÐòÖ®Í⣬ÄãÐèÒªÔٴε÷ÓÃCTFontDescriptorMatchFontDescriptorsWithProgressHandler¡£
ÄãÒ²¿ÉÒÔ×¢²áеÄkCTFontManagerRegisteredFontsChangedNotification֪ͨÀ´¸ú×ÙÐÂ×ÖÌåÔÚºÎÊ±ÔØÈëµ½ÁË×ÖÌå×¢²á±íÖС£Äã¿ÉÒÔÔÚ
WWDC2013 µÄ Session223 ¡°Using Fonts with TextKit¡±ÖвéÕÒ¸ü¶àÐÅÏ¢¡£
Õ⻹²»¹»£¿
û¹ØÏµ£¬iOS7 µÄж«Î÷Ô¶²»Ö¹Èç´Ë£¡Á˽âһϠNSHipster Ä㽫Ã÷°×ÓïÒôºÏ³ÉÏà¹ØµÄ¶«Î÷£¬base64¡¢NSURLComponents¡¢NSProgress¡¢bar
codes¡¢reading lists ÒÔ¼° CIDetectorEyeBlink¡£»¹ÓкܶàÎÒÃÇûÓк¸Çµ½µÄ£¬±ÈÈçÆ»¹û
iOS7 µÄ API ±ä»¯£¬iOS Ö¸ÄϵÄж«Î÷ÒÔ¼° Foundation Release Notes£¨ÕâЩ¶¼ÊÇ·þÎñÓÚ
OS XµÄ£¬µ«ÊÇ´úÂë¶¼Êǹ²ÏíµÄ£¬Ò²Í¬ÑùÊÊÓÃÓÚ iOS£©¡£ºÜ¶à·½·¨¶¼»¹Ã»ÐγÉÎĵµ£¬µÈ×ÅÄãÀ´Ì½¾¿ºÍ blog¡£
|