1.
ÓÃARC¹ÜÀíÄÚ´æ
ARC(Automatic ReferenceCounting, ×Ô¶¯ÒýÓüÆÊý)ºÍiOS5Ò»Æð·¢²¼£¬Ëü±ÜÃâÁË×î³£¼ûµÄÒ²¾ÍÊǾ³£ÊÇÓÉÓÚÎÒÃÇÍü¼ÇÊÍ·ÅÄÚ´æËùÔì³ÉµÄÄÚ´æÐ¹Â¶¡£Ëü×Ô¶¯ÎªÄã¹ÜÀíretainºÍreleaseµÄ¹ý³Ì£¬ËùÒÔÄã¾Í²»±ØÈ¥ÊÖ¶¯¸ÉÔ¤ÁË¡£Íüµô´úÂë¶Î½áβµÄrelease¼òÖ±Ïñ¼ÇµÃ³Ô·¹Ò»Ñù¼òµ¥¡£¶øARC»á×Ô¶¯ÔڵײãΪÄã×öÕâЩ¹¤×÷¡£³ýÁ˰ïÄã±ÜÃâÄÚ´æÐ¹Â¶£¬ARC»¹¿ÉÒÔ°ïÄãÌá¸ßÐÔÄÜ£¬ËüÄܱ£Ö¤Êͷŵô²»ÔÙÐèÒªµÄ¶ÔÏóµÄÄÚ´æ¡£
ÏÖÔÚËùÓеÄiOS³ÌÐò¶¼ÓÃARCÁË£¬ÕâÌõ¿ÉÒÔºöÂÔ¡£ 2. ÔÚÕýÈ·µÄµØ·½Ê¹Óà reuseIdentifier
Ò»¸ö¿ª·¢Öг£¼ûµÄ´íÎó¾ÍÊÇûÓиøUITableViewCells£¬ UICollectionViewCells£¬ÉõÖÁÊÇUITableViewHeaderFooterViewsÉèÖÃÕýÈ·µÄreuseIdentifier¡£
ΪÁËÐÔÄÜ×îÓÅ»¯£¬table viewÓÃtableView:cellForRowAtIndexPath:Ϊrows·ÖÅäcellsµÄʱºò£¬ËüµÄÊý¾ÝÓ¦¸ÃÖØÓÃ×ÔUITableViewCell¡£Ò»¸ötable
viewά³ÖÒ»¸ö¶ÓÁеÄÊý¾Ý¿ÉÖØÓõÄUITableViewCell¶ÔÏó¡£
²»Ê¹ÓÃreuseIdentifierµÄ»°£¬Ã¿ÏÔʾһÐÐtable view¾Í²»µÃ²»ÉèÖÃȫеÄcell¡£Õâ¶ÔÐÔÄܵÄÓ°Ïì¿ÉÊÇÏ൱´óµÄ£¬ÓÈÆä»áʹappµÄ¹ö¶¯ÌåÑé´ó´òÕÛ¿Û¡£
×ÔiOS6Æð£¬³ýÁËUICollectionViewµÄcellsºÍ²¹³äviews£¬ÄãÒ²Ó¦¸ÃÔÚheaderºÍfooter
viewsÖÐʹÓÃreuseIdentifiers¡£
ÏëҪʹÓÃreuseIdentifiersµÄ»°£¬ÔÚÒ»¸ötable viewÖÐÌí¼ÓÒ»¸öеÄcellʱÔÚdata
source objectÖÐÌí¼ÓÕâ¸ö·½·¨£º
staticNSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath:indexPath]; |
staticNSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
Õâ¸ö·½·¨°ÑÄÇЩÒѾ´æÔÚµÄcell´Ó¶ÓÁÐÖÐÅųý£¬»òÕßÔÚ±ØÒªÊ±Ê¹ÓÃÏÈǰע²áµÄnib»òÕßclass´´ÔìеÄcell¡£Èç¹ûûÓпÉÖØÓõÄcell£¬ÄãҲûÓÐ×¢²áÒ»¸öclass»òÕßnibµÄ»°£¬Õâ¸ö·½·¨·µ»Ønil¡£
3.¾¡Á¿°ÑviewsÉèÖÃΪ͸Ã÷
Èç¹ûÄãÓÐ͸Ã÷µÄViewsÄãÓ¦¸ÃÉèÖÃËüÃǵÄopaqueÊôÐÔΪYES¡£
ÔÒòÊÇÕâ»áʹϵͳÓÃÒ»¸ö×îÓŵķ½Ê½äÖȾÕâЩviews¡£Õâ¸ö¼òµ¥µÄÊôÐÔÔÚIB»òÕß´úÂëÀï¶¼¿ÉÒÔÉ趨¡£
AppleµÄÎĵµ¶ÔÓÚΪͼƬÉèÖÃ͸Ã÷ÊôÐÔµÄÃèÊöÊÇ£º
(opaque)Õâ¸öÊôÐÔ¸øäÖȾϵͳÌṩÁËÒ»¸öÈçºÎ´¦ÀíÕâ¸öviewµÄÌáʾ¡£Èç¹ûÉèΪYES£¬äÖȾϵͳ¾ÍÈÏΪÕâ¸öviewÊÇÍêÈ«²»Í¸Ã÷µÄ£¬ÕâʹµÃäÖȾϵͳÓÅ»¯Ò»Ð©äÖȾ¹ý³ÌºÍÌá¸ßÐÔÄÜ¡£Èç¹ûÉèÖÃΪNO£¬äÖȾϵͳÕý³£µØºÍÆäËüÄÚÈÝ×é³ÉÕâ¸öView¡£Ä¬ÈÏÖµÊÇYES¡£
ÔÚÏà¶Ô±È½Ï¾²Ö¹µÄ»ÃæÖУ¬ÉèÖÃÕâ¸öÊôÐÔ²»»áÓÐÌ«´óÓ°Ï졣Ȼ¶øµ±Õâ¸öviewǶÔÚscroll viewÀï±ß£¬»òÕßÊÇÒ»¸ö¸´ÔÓ¶¯»µÄÒ»²¿·Ö£¬²»ÉèÖÃÕâ¸öÊôÐԵϰ»áÔںܴó³Ì¶ÈÉÏÓ°ÏìappµÄÐÔÄÜ¡£
Äã¿ÉÒÔÔÚÄ£ÄâÆ÷ÖÐÓÃDebug\Color Blended LayersÑ¡ÏîÀ´·¢ÏÖÄÄЩviewûÓб»ÉèÖÃΪopaque¡£Ä¿±ê¾ÍÊÇ£¬ÄÜÉèΪopaqueµÄ¾ÍÈ«ÉèΪopaque!
ÕâÀïÓÐÒ»µãÐèҪעÒ⣬ֻҪÊÇÓÐÖÐÎÄ×Ö·ûµÄLabel£¬ÄÄÅÂÄãÉèÖóɲ»Í¸Ã÷£¬Ä£ÄâÆ÷ÖÐÕâ¸öLabelÒÀÈ»»á±äºì£¬Õâ¸ö²Â²âÊÇ×Ö·û»æÖƵÄʱºò³öµÄÎÊÌ⣬Õâ¸öĿǰûÕÒµ½ºÃµÄ½â¾ö·½·¨¡£
4.±ÜÃâ¹ýÓÚÅÓ´óµÄXIB
iOS5ÖмÓÈëµÄStoryboards(·Ö¾µ)ÕýÔÚ¿ìËÙÈ¡´úXIB¡£È»¶øXIBÔÚһЩ³¡¾°ÖÐÈÔÈ»ºÜÓÐÓᣱÈÈçÄãµÄappÐèÒªÊÊÓ¦iOS5֮ǰµÄÉ豸£¬»òÕßÄãÓÐÒ»¸ö×Ô¶¨ÒåµÄ¿ÉÖØÓõÄview,Äã¾Í²»¿É±ÜÃâµØÒªÓõ½ËûÃÇ¡£
Èç¹ûÄã²»µÃ²»XIBµÄ»°£¬Ê¹ËûÃǾ¡Á¿¼òµ¥¡£³¢ÊÔΪÿ¸öControllerÅäÖÃÒ»¸öµ¥¶ÀµÄXIB£¬¾¡¿ÉÄܰÑÒ»¸öView
ControllerµÄview²ã´Î½á¹¹·ÖÉ¢µ½µ¥¶ÀµÄXIBÖÐÈ¥¡£
ÐèҪעÒâµÄÊÇ£¬µ±Äã¼ÓÔØÒ»¸öXIBµÄʱºòËùÓÐÄÚÈݶ¼±»·ÅÔÚÁËÄÚ´æÀ°üÀ¨ÈκÎͼƬ¡£Èç¹ûÓÐÒ»¸ö²»»á¼´¿ÌÓõ½µÄview£¬ÄãÕâ¾ÍÊÇÔÚÀ˷ѱ¦¹óµÄÄÚ´æ×ÊÔ´ÁË¡£Storyboards¾ÍÊÇÁíÒ»ÂëʶùÁË£¬storyboard½öÔÚÐèҪʱʵÀý»¯Ò»¸öview
controller.
µ±¼ÒÔÚXIBÊÇ£¬ËùÓÐͼƬ¶¼±»chache£¬Èç¹ûÄãÔÚ×öOS X¿ª·¢µÄ»°£¬ÉùÒôÎļþÒ²ÊÇ¡£AppleÔÚÏà¹ØÎĵµÖеļÇÊöÊÇ£º
µ±Äã¼ÓÔØÒ»¸öÒýÓÃÁËͼƬ»òÕßÉùÒô×ÊÔ´µÄnibʱ£¬nib¼ÓÔØ´úÂë»á°ÑͼƬºÍÉùÒôÎļþд½øÄÚ´æ¡£ÔÚOS XÖУ¬Í¼Æ¬ºÍÉùÒô×ÊÔ´±»»º´æÔÚnamed
cacheÖÐÒԱ㽫À´Óõ½Ê±»ñÈ¡¡£ÔÚiOSÖУ¬½öͼƬ×ÊÔ´»á±»´æ½ønamed caches¡£È¡¾öÓÚÄãËùÔ򵀮½Ì¨£¬Ê¹ÓÃNSImage
»òUIImageµÄimageNamed:·½·¨À´»ñȡͼƬ×ÊÔ´¡£
Õâ¸öÎÊÌâÎÒÉîÓÐÌå»á£¬ÓÃxibдµÄ½çÃæ¼ÓÔØËٶȱÈÖ±½ÓÓôúÂëдµÄÒªÂýºÃ¶à¡£
5.²»Òª×èÈûÖ÷Ïß³Ì
ÓÀÔ¶²»ÒªÊ¹Ö÷Ï̳߳е£¹ý¶à¡£ÒòΪUIKitÔÚÖ÷Ïß³ÌÉÏ×öËùÓй¤×÷£¬äÖȾ£¬¹ÜÀí´¥Ãþ·´Ó¦£¬»ØÓ¦ÊäÈëµÈ¶¼ÐèÒªÔÚËüÉÏÃæÍê³É¡£
һֱʹÓÃÖ÷Ï̵߳ķçÏÕ¾ÍÊÇÈç¹ûÄãµÄ´úÂëÕæµÄblockÁËÖ÷Ị̈߳¬ÄãµÄapp»áʧȥ·´Ó¦¡£
´ó²¿·Ö×è°Ö÷½ø³ÌµÄÇéÐÎÊÇÄãµÄappÔÚ×öÒ»Ð©Ç£Éæµ½¶ÁдÍⲿ×ÊÔ´µÄI/O²Ù×÷£¬±ÈÈç´æ´¢»òÕßÍøÂç¡£
Äã¿ÉÒÔʹÓÃNSURLConnectionÒì²½µØ×öÍøÂç²Ù×÷:
+ (void)sendAsynchronousRequest:(NSURLRequest *) request queue:(NSOperationQueue*) queue completionHandler: (void (^)(NSURLResponse*, NSData*, NSError*))handler |
»òÕßʹÓÃÏñAFNetworkingÕâÑùµÄ¿ò¼ÜÀ´Òì²½µØ×öÕâЩ²Ù×÷¡£
Èç¹ûÄãÐèÒª×öÆäËüÀàÐ͵ÄÐèÒªºÄ·Ñ¾Þ´ó×ÊÔ´µÄ²Ù×÷(±ÈÈçʱ¼äÃô¸ÐµÄ¼ÆËã»òÕß´æ´¢¶Áд)ÄǾÍÓà Grand Central
Dispatch£¬»òÕßNSOperationºÍ NSOperationQueues.
ÏÂÃæ´úÂëÊÇʹÓÃGCDµÄÄ£°å
dispatch_async(dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // switch to a background thread and perform your expensive operation dispatch_async(dispatch_get_main_queue(), ^{ // switch back to the main thread to update your UI }); }); |
·¢ÏÖ´úÂëÖÐÓÐÒ»¸öǶÌ×µÄdispatch_asyncÂð£¿ÕâÊÇÒòΪÈκÎUIKitÏà¹ØµÄ´úÂëÐèÒªÔÚÖ÷Ïß³ÌÉϽøÐС£
6. ÔÚImage ViewsÖе÷ÕûͼƬ´óС
Èç¹ûÒªÔÚUIImageViewÖÐÏÔʾһ¸öÀ´×ÔbundleµÄͼƬ£¬ÄãÓ¦±£Ö¤Í¼Æ¬µÄ´óСºÍUIImageViewµÄ´óСÏàͬ¡£ÔÚÔËÐÐÖÐËõ·ÅͼƬÊǺܺķÑ×ÊÔ´µÄ£¬ÌرðÊÇUIImageViewǶÌ×ÔÚUIScrollViewÖеÄÇé¿öÏ¡£
Èç¹ûͼƬÊÇ´ÓÔ¶¶Ë·þÎñ¼ÓÔØµÄÄã²»ÄÜ¿ØÖÆÍ¼Æ¬´óС£¬±ÈÈçÔÚÏÂÔØÇ°µ÷Õûµ½ºÏÊÊ´óСµÄ»°£¬Äã¿ÉÒÔÔÚÏÂÔØÍê³Éºó£¬×îºÃÊÇÓÃbackground
thread£¬Ëõ·ÅÒ»´Î£¬È»ºóÔÚUIImageViewÖÐʹÓÃËõ·ÅºóµÄͼƬ¡£
7. Ñ¡ÔñÕýÈ·µÄCollection
ѧ»áÑ¡Ôñ¶ÔÒµÎñ³¡¾°×îºÏÊʵÄÀà»òÕß¶ÔÏóÊÇд³öÄÜЧ¸ßµÄ´úÂëµÄ»ù´¡¡£µ±´¦ÀícollectionsʱÕâ¾ä»°ÓÈÆäÕýÈ·¡£
һЩ³£¼ûcollectionµÄ×ܽ᣺
Arrays: ÓÐÐòµÄÒ»×éÖµ¡£Ê¹ÓÃindexÀ´lookupºÜ¿ì£¬Ê¹ÓÃvalue lookupºÜÂý£¬²åÈë/ɾ³ýºÜÂý¡£
Dictionaries: ´æ´¢¼üÖµ¶Ô¡£ÓüüÀ´²éÕұȽϿ졣
Sets: ÎÞÐòµÄÒ»×éÖµ¡£ÓÃÖµÀ´²éÕҺܿ죬²åÈë/ɾ³ýºÜ¿ì¡£ÒòΪSetÓõ½Á˹þÏ££¬ËùÒÔ²åÈëɾ³ý²éÕÒËٶȱÈArray¿ìºÜ¶à
8. ´ò¿ªgzipѹËõ
´óÁ¿appÒÀÀµÓÚÔ¶¶Ë×ÊÔ´ºÍµÚÈý·½API£¬Äã¿ÉÄܻῪ·¢Ò»¸öÐèÒª´ÓÔ¶¶ËÏÂÔØXML, JSON, HTML»òÕ߯äËü¸ñʽµÄapp¡£
ÎÊÌâÊÇÎÒÃǵÄÄ¿±êÊÇÒÆ¶¯É豸£¬Òò´ËÄã¾Í²»ÄÜÖ¸ÍûÍøÂç×´¿öÓжàºÃ¡£Ò»¸öÓû§ÏÖÔÚ»¹ÔÚedgeÍøÂ磬ÏÂÒ»·ÖÖÓ¿ÉÄܾÍÇл»µ½ÁË3G¡£²»ÂÛʲô³¡¾°£¬Äã¿Ï¶¨²»ÏëÈÃÄãµÄÓû§µÈÌ«³¤Ê±¼ä¡£
¼õСÎĵµµÄÒ»¸ö·½Ê½¾ÍÊÇÔÚ·þÎñ¶ËºÍÄãµÄappÖдò¿ªgzip¡£Õâ¶ÔÓÚÎÄ×ÖÕâÖÖÄÜÓиü¸ßѹËõÂʵÄÊý¾ÝÀ´Ëµ»áÓиüÏÔÖøµÄЧÓá£
ºÃÏûÏ¢ÊÇ£¬iOSÒѾÔÚNSURLConnectionÖÐĬÈÏÖ§³ÖÁËgzipѹËõ£¬µ±È»AFNetworkingÕâЩ»ùÓÚËüµÄ¿ò¼ÜÒàÈ»¡£ÏñGoogle
App EngineÕâÐ©ÔÆ·þÎñÌṩÕßÒ²ÒѾ֧³ÖÁËѹËõÊä³ö¡£
9. ÖØÓúÍÑÓ³Ù¼ÓÔØ(lazy load) Views
¸ü¶àµÄviewÒâζןü¶àµÄäÖȾ£¬Ò²¾ÍÊǸü¶àµÄCPUºÍÄÚ´æÏûºÄ£¬¶ÔÓÚÄÇÖÖǶÌ×Á˺ܶàviewÔÚUIScrollViewÀï±ßµÄapp¸üÊÇÈç´Ë¡£
ÕâÀïÎÒÃÇÓõ½µÄ¼¼ÇɾÍÊÇÄ£·ÂUITableViewºÍUICollectionViewµÄ²Ù×÷:²»ÒªÒ»´Î´´½¨ËùÓеÄsubview£¬¶øÊǵ±ÐèҪʱ²Å´´½¨£¬µ±ËüÃÇÍê³ÉÁËʹÃü£¬°ÑËûÃǷŽøÒ»¸ö¿ÉÖØÓõĶÓÁÐÖС£
ÕâÑùµÄ»°Äã¾ÍÖ»ÐèÒªÔÚ¹ö¶¯·¢Éúʱ´´½¨ÄãµÄviews£¬±ÜÃâÁ˲»»®ËãµÄÄÚ´æ·ÖÅä¡£
´´½¨viewsµÄÄÜЧÎÊÌâÒ²ÊÊÓÃÓÚÄãappµÄÆäËü·½Ãæ¡£ÏëÏóÒ»ÏÂÒ»¸öÓû§µã»÷Ò»¸ö°´Å¥µÄʱºòÐèÒª³ÊÏÖÒ»¸öviewµÄ³¡¾°¡£ÓÐÁ½ÖÖʵÏÖ·½·¨£º 1. ´´½¨²¢Òþ²ØÕâ¸öviewµ±Õâ¸öscreen¼ÓÔØµÄʱºò£¬µ±ÐèҪʱÏÔʾËü£» 2. µ±ÐèҪʱ²Å´´½¨²¢Õ¹Ê¾¡£
ÿ¸ö·½°¸¶¼ÓÐÆäÓÅȱµã¡£ÓõÚÒ»ÖÖ·½°¸µÄ»°ÒòΪÄãÐèÒªÒ»¿ªÊ¼¾Í´´½¨Ò»¸öview²¢±£³ÖËüÖ±µ½²»ÔÙʹÓã¬Õâ¾Í»á¸ü¼ÓÏûºÄÄڴ档Ȼ¶øÕâÒ²»áʹÄãµÄapp²Ù×÷¸üÃô¸ÐÒòΪµ±Óû§µã»÷°´Å¥µÄʱºòËüÖ»ÐèÒª¸Ä±äÒ»ÏÂÕâ¸öviewµÄ¿É¼ûÐÔ¡£
µÚ¶þÖÖ·½°¸ÔòÏà·´-ÏûºÄ¸üÉÙÄڴ棬µ«ÊÇ»áÔÚµã»÷°´Å¥µÄʱºò±ÈµÚÒ»ÖÖÉÔÏÔ¿¨¶Ù¡£ 10. Cache, Cache, »¹ÊÇCache!×¢ÒâÄãµÄ»º´æ
Ò»¸ö¼«ºÃµÄÔÔò¾ÍÊÇ£¬»º´æËùÐèÒªµÄ£¬Ò²¾ÍÊÇÄÇЩ²»´ó¿ÉÄܸı䵫ÊÇÐèÒª¾³£¶ÁÈ¡µÄ¶«Î÷¡£
ÎÒÃÇÄÜ»º´æÐ©Ê²Ã´ÄØ£¿Ò»Ð©Ñ¡ÏîÊÇ£¬Ô¶¶Ë·þÎñÆ÷µÄÏìÓ¦£¬Í¼Æ¬£¬ÉõÖÁ¼ÆËã½á¹û£¬±ÈÈçUITableViewµÄÐиߡ£
NSURLConnectionĬÈϻỺ´æ×ÊÔ´ÔÚÄÚ´æ»òÕß´æ´¢Öиù¾ÝËüËù¼ÓÔØµÄHTTP Headers¡£ÄãÉõÖÁ¿ÉÒÔÊÖ¶¯´´½¨Ò»¸öNSURLRequestÈ»ºóʹËüÖ»¼ÓÔØ»º´æµÄÖµ¡£
ÏÂÃæÊÇÒ»¸ö¿ÉÓõĴúÂë¶Î£¬Äã¿ÉÒÔ¿ÉÒÔÓÃËüȥΪһ¸ö»ù±¾²»»á¸Ä±äµÄͼƬ´´½¨Ò»¸öNSURLRequest²¢»º´æËü£º
+ (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; // this will make sure the request always returns the cached image request.HTTPShouldHandleCookies = NO; request.HTTPShouldUsePipelining = YES; [request addValue:@"image/*"forHTTPHeaderField:@"Accept"]; return request; } |
×¢ÒâÄã¿ÉÒÔͨ¹ý NSURLConnection »ñȡһ¸öURL request£¬ AFNetworkingÒ²Ò»ÑùµÄ¡£ÕâÑùÄã¾Í²»±ØÎª²ÉÓÃÕâÌõtip¶ø¸Ä±äËùÓеÄnetworking´úÂëÁË¡£
Èç¹ûÄãÐèÒª»º´æÆäËü²»ÊÇHTTP RequestµÄ¶«Î÷£¬Äã¿ÉÒÔÓÃNSCache¡£
NSCacheºÍNSDictionaryÀàËÆ£¬²»Í¬µÄÊÇϵͳ»ØÊÕÄÚ´æµÄʱºòËü»á×Ô¶¯É¾µôËüµÄÄÚÈÝ¡£ 11.ȨºâäÖȾ·½·¨
ÔÚiOSÖпÉÒÔÓкܶ෽·¨×ö³öƯÁÁµÄ°´Å¥¡£Äã¿ÉÒÔÓÃÕû·ùµÄͼƬ£¬¿Éµ÷´óСµÄͼƬ£¬»òÕß¿ÉÒÔÓÃCALayer£¬
CoreGraphicsÉõÖÁOpenGLÀ´»ËüÃÇ¡£µ±È»Ã¿¸ö²»Í¬µÄ½â¾ö·½·¨¶¼Óв»Í¬µÄ¸´Ôӳ̶ȺÍÏàÓ¦µÄÐÔÄÜ¡£
¼òµ¥À´Ëµ£¬¾ÍÊÇÓÃÊÂÏÈäÖȾºÃµÄͼƬ¸ü¿ìһЩ£¬ÒòΪÈç´ËÒ»À´iOS¾ÍÃâÈ¥ÁË´´½¨Ò»¸öͼƬÔÙ»¶«Î÷ÉÏȥȻºóÏÔʾÔÚÆÁÄ»ÉϵijÌÐò¡£ÎÊÌâÊÇÄãÐèÒª°ÑËùÓÐÄãÐèÒªÓõ½µÄͼƬ·Åµ½appµÄbundleÀïÃæ£¬ÕâÑù¾ÍÔö¼ÓÁËÌå»ý¨CÕâ¾ÍÊÇʹÓÿɱä´óСµÄͼƬ¸üºÃµÄµØ·½ÁË:Äã¿ÉÒÔʡȥһЩ²»±ØÒªµÄ¿Õ¼ä£¬Ò²²»ÐèÒªÔÙΪ²»Í¬µÄÔªËØ(±ÈÈç°´Å¥)À´×ö²»Í¬µÄͼ¡£
È»¶ø£¬Ê¹ÓÃͼƬҲÒâζ×ÅÄãʧȥÁËʹÓôúÂëµ÷ÕûͼƬµÄ»ú¶¯ÐÔ£¬ÄãÐèÒªÒ»±éÓÖÒ»±é²»¶ÏµØÖØ×öËûÃÇ£¬ÕâÑù¾ÍºÜÀË·Ñʱ¼äÁË£¬¶øÇÒÄãÈç¹ûÒª×öÒ»¸ö¶¯»Ð§¹û£¬ËäȻÿ·ùͼֻÊÇһЩϸ½ÚµÄ±ä»¯Äã¾ÍÐèÒªºÜ¶àµÄͼƬÔì³Ébundle´óСµÄ²»¶ÏÔö´ó¡£
×ܵÃÀ´Ëµ£¬ÄãÐèҪȨºâÒ»ÏÂÀû±×£¬µ½µ×ÊÇÒªÐÔÄÜÄÜ»¹ÊÇÒªbundle±£³ÖºÏÊʵĴóС¡£ 12.´¦ÀíÄڴ澯¸æ
Ò»µ©ÏµÍ³ÄÚ´æ¹ýµÍ£¬iOS»á֪ͨËùÓÐÔËÐÐÖÐapp¡£ÔÚ¹Ù·½ÎĵµÖÐÊÇÕâÑù¼ÇÊö:
Èç¹ûÄãµÄappÊÕµ½ÁËÄڴ澯¸æ£¬Ëü¾ÍÐèÒª¾¡¿ÉÄÜÊͷŸü¶àµÄÄÚ´æ¡£×î¼Ñ·½Ê½ÊÇÒÆ³ý¶Ô»º´æ£¬Í¼Æ¬objectºÍÆäËûһЩ¿ÉÒÔÖØ´´½¨µÄobjectsµÄstrong
references.
ÐÒÔ˵ÄÊÇ£¬UIKitÌṩÁ˼¸ÖÖÊÕ¼¯µÍÄڴ澯¸æµÄ·½·¨:
ÔÚapp delegateÖÐʹÓÃapplicationDidReceiveMemoryWarning:µÄ·½·¨
ÔÚÄãµÄ×Ô¶¨ÒåUIViewControllerµÄ×ÓÀà(subclass)Öи²¸ÇdidReceiveMemoryWarning
×¢²á²¢½ÓÊÕ UIApplicationDidReceiveMemoryWarningNotificationµÄ֪ͨ
Ò»µ©ÊÕµ½ÕâÀà֪ͨ£¬Äã¾ÍÐèÒªÊÍ·ÅÈκβ»±ØÒªµÄÄÚ´æÊ¹Óá£
ÀýÈ磬UIViewControllerµÄĬÈÏÐÐΪÊÇÒÆ³ýһЩ²»¿É¼ûµÄview£¬ËüµÄһЩ×ÓÀàÔò¿ÉÒÔ²¹³äÕâ¸ö·½·¨£¬É¾µôһЩ¶îÍâµÄÊý¾Ý½á¹¹¡£Ò»¸öÓÐͼƬ»º´æµÄapp¿ÉÒÔÒÆ³ý²»ÔÚÆÁÄ»ÉÏÏÔʾµÄͼƬ¡£
ÕâÑù¶ÔÄڴ澯±¨µÄ´¦ÀíÊǺܱØÒªµÄ£¬Èô²»ÖØÊÓ£¬ÄãµÄapp¾Í¿ÉÄܱ»ÏµÍ³É±µô¡£
È»¶ø£¬µ±ÄãÒ»¶¨ÒªÈ·ÈÏÄãËùÑ¡ÔñµÄobjectÊÇ¿ÉÒÔ±»ÖØÏÖ´´½¨µÄÀ´ÊÍ·ÅÄÚ´æ¡£Ò»¶¨ÒªÔÚ¿ª·¢ÖÐÓÃÄ£ÄâÆ÷ÖеÄÄÚ´æÌáÐÑÄ£ÄâÈ¥²âÊÔһϡ£
µ±È»£¬ÏÖÔÚiOSÉ豸ÔËÐÐÄÚ´æÔ½À´Ô½´ó£¬ÕâÒ»µãºÜÄѳöÏÖÁË¡£ 13.ÖØÓôó¿ªÏú¶ÔÏó
һЩobjectsµÄ³õʼ»¯ºÜÂý£¬±ÈÈçNSDateFormatterºÍNSCalendar¡£È»¶ø£¬ÄãÓÖ²»¿É±ÜÃâµØÐèҪʹÓÃËüÃÇ£¬±ÈÈç´ÓJSON»òÕßXMLÖнâÎöÊý¾Ý¡£
ÏëÒª±ÜÃâʹÓÃÕâ¸ö¶ÔÏóµÄÆ¿¾±Äã¾ÍÐèÒªÖØÓÃËûÃÇ£¬¿ÉÒÔͨ¹ýÌí¼ÓÊôÐÔµ½ÄãµÄclassÀï»òÕß´´½¨¾²Ì¬±äÁ¿À´ÊµÏÖ¡£
×¢ÒâÈç¹ûÄãҪѡÔñµÚ¶þÖÖ·½·¨£¬¶ÔÏó»áÔÚÄãµÄappÔËÐÐʱһֱ´æÔÚÓÚÄÚ´æÖУ¬ºÍµ¥Àý(singleton)ºÜÏàËÆ¡£
ÏÂÃæµÄ´úÂë˵Ã÷ÁËʹÓÃÒ»¸öÊôÐÔÀ´ÑÓ³Ù¼ÓÔØÒ»¸ödate formatter. µÚÒ»´Îµ÷ÓÃʱËü»á´´½¨Ò»¸öеÄʵÀý£¬ÒÔºóµÄµ÷ÓÃÔò½«·µ»ØÒѾ´´½¨µÄʵÀý£º
// in your .h or inside a class extension @property (nonatomic, strong) NSDateFormatter *formatter; // inside the implementation (.m) // When you need, just use self.formatter - (NSDateFormatter *)formatter { if(!_formatter) { _formatter = [[NSDateFormatter alloc] init]; _formatter.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy";// twitter date format } return _formatter; } |
»¹ÐèҪעÒâµÄÊÇ£¬ÆäʵÉèÖÃÒ»¸öNSDateFormatterµÄËٶȲ¶àÊǺʹ´½¨ÐµÄÒ»ÑùÂýµÄ£¡ËùÒÔÈç¹ûÄãµÄappÐèÒª¾³£½øÐÐÈÕÆÚ¸ñʽ´¦ÀíµÄ»°£¬Äã»á´ÓÕâ¸ö·½·¨Öеõ½²»Ð¡µÄÐÔÄÜÌáÉý¡£ 14. ʹÓÃSprite Sheets
Sprite sheet¿ÉÒÔÈÃäÖȾËٶȼӿ죬ÉõÖÁ±È±ê×¼µÄÆÁÄ»äÖȾ·½·¨½ÚÊ¡ÄÚ´æ¡£ 15.±ÜÃâ·´¸´´¦ÀíÊý¾Ý
Ðí¶àÓ¦ÓÃÐèÒª´Ó·þÎñÆ÷¼ÓÔØ¹¦ÄÜËùÐèµÄ³£ÎªJSON»òÕßXML¸ñʽµÄÊý¾Ý¡£ÔÚ·þÎñÆ÷¶ËºÍ¿Í»§¶ËʹÓÃÏàͬµÄÊý¾Ý½á¹¹ºÜÖØÒª¡£ÔÚÄÚ´æÖвÙ×÷Êý¾ÝʹËüÃÇÂú×ãÄãµÄÊý¾Ý½á¹¹ÊÇ¿ªÏúºÜ´óµÄ¡£
±ÈÈçÄãÐèÒªÊý¾ÝÀ´Õ¹Ê¾Ò»¸ötable view,×îºÃÖ±½Ó´Ó·þÎñÆ÷È¡array½á¹¹µÄÊý¾ÝÒÔ±ÜÃâ¶îÍâµÄÖмäÊý¾Ý½á¹¹¸Ä±ä¡£
ÀàËÆµÄ£¬Èç¹ûÐèÒª´ÓÌØ¶¨keyÖÐÈ¡Êý¾Ý£¬ÄÇô¾ÍʹÓüüÖµ¶ÔµÄdictionary¡£
ÕâÒ»µãÔÚ´¦Àí´óÁ¿Êý¾ÝµÄʱºò¼«ÎªÖØÒª£¬Óÿռ任ʱ¼äµÄ·½·¨Ò²ÐíÊǼ«ºÃµÄ¡£ 16.Ñ¡ÔñÕýÈ·µÄÊý¾Ý¸ñʽ
´ÓappºÍÍøÂç·þÎñ¼ä´«ÊäÊý¾ÝÓкܶ෽°¸£¬×î³£¼ûµÄ¾ÍÊÇJSONºÍXML¡£ÄãÐèҪѡÔñ¶ÔÄãµÄappÀ´Ëµ×îºÏÊʵÄÒ»¸ö¡£
½âÎöJSON»á±ÈXML¸ü¿ìһЩ£¬JSONҲͨ³£¸üС¸ü±ãÓÚ´«Êä¡£´ÓiOS5ÆðÓÐÁ˹ٷ½ÄÚ½¨µÄJSON deserialization¾Í¸ü¼Ó·½±ãʹÓÃÁË¡£
µ«ÊÇXMLÒ²ÓÐXMLµÄºÃ´¦£¬±ÈÈçʹÓÃSAXÀ´½âÎöXML¾ÍÏñ½âÎö±¾µØÎļþÒ»Ñù£¬Äã²»ÐèÏñ½âÎöjsonÒ»ÑùµÈµ½Õû¸öÎĵµÏÂÔØÍê³É²Å¿ªÊ¼½âÎö¡£µ±Äã´¦ÀíºÜ´óµÄÊý¾ÝµÄʱºò¾Í»á¼«´óµØ¼õµÍÄÚ´æÏûºÄºÍÔö¼ÓÐÔÄÜ¡£
ÏÖÔÚ»ù±¾É϶¼ÊÇJSONÁË¡£ 17.ÕýÈ·É趨±³¾°Í¼Æ¬
ÔÚViewÀï·Å±³¾°Í¼Æ¬¾ÍÏñºÜ¶àÆäËüiOS±à³ÌÒ»ÑùÓкܶ෽·¨:
ʹÓÃUIColorµÄ colorWithPatternImageÀ´ÉèÖñ³¾°É«£»
ÔÚviewÖÐÌí¼ÓÒ»¸öUIImageView×÷Ϊһ¸ö×ÓView¡£
Èç¹ûÄãʹÓÃÈ«»·ùµÄ±³¾°Í¼£¬Äã¾Í±ØÐëʹÓÃUIImageViewÒòΪUIColorµÄcolorWithPatternImageÊÇÓÃÀ´´´½¨Ð¡µÄÖØ¸´µÄͼƬ×÷Ϊ±³¾°µÄ¡£ÕâÖÖÇéÐÎÏÂʹÓÃUIImageView¿ÉÒÔ½ÚÔ¼²»ÉÙµÄÄڴ棺
// You could also achieve the same result in Interface Builder
UIImageView *backgroundView = [[UIImageView alloc]
initWithImage:[UIImage imageNamed:@"background"]];
[self.view addSubview:backgroundView]; |
Èç¹ûÄãÓÃСͼƽÆÌÀ´´´½¨±³¾°£¬Äã¾ÍÐèÒªÓÃUIColorµÄcolorWithPatternImageÀ´×öÁË£¬Ëü»á¸ü¿ìµØäÖȾҲ²»»á»¨·ÑºÜ¶àÄڴ棺
self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"background"]]; |
18. ¼õÉÙʹÓÃWebÌØÐÔ
UIWebViewºÜÓÐÓã¬ÓÃËüÀ´Õ¹Ê¾ÍøÒ³ÄÚÈÝ»òÕß´´½¨UIKitºÜÄÑ×öµ½µÄ¶¯»Ð§¹ûÊǺܼòµ¥µÄÒ»¼þÊ¡£
µ«ÊÇÄã¿ÉÄÜÓÐ×¢Òâµ½UIWebView²¢²»ÏñÇý¶¯SafariµÄÄÇô¿ì¡£ÕâÊÇÓÉÓÚÒÔJIT compilationÎªÌØÉ«µÄWebkitµÄNitro
EngineµÄÏÞÖÆ¡£
ËùÒÔÏëÒª¸ü¸ßµÄÐÔÄÜÄã¾ÍÒªµ÷ÕûÏÂÄãµÄHTMLÁË¡£µÚÒ»¼þÒª×öµÄʾÍÊǾ¡¿ÉÄÜÒÆ³ý²»±ØÒªµÄJavaScript£¬±ÜÃâʹÓùý´óµÄ¿ò¼Ü¡£ÄÜÖ»ÓÃÔÉújs¾Í¸üºÃÁË¡£
ÁíÍ⣬¾¡¿ÉÄÜÒì²½¼ÓÔØÀýÈçÓû§ÐÐΪͳ¼ÆscriptÕâÖÖ²»Ó°ÏìÒ³Ãæ±í´ïµÄjavascript¡£
×îºó£¬ÓÀԶҪעÒâÄãʹÓõÄͼƬ£¬±£Ö¤Í¼Æ¬µÄ·ûºÏÄãʹÓõĴóС¡£Ê¹ÓÃSprite sheetÌá¸ß¼ÓÔØËٶȺͽÚÔ¼ÄÚ´æ¡£ 19. É趨Shadow Path
ÈçºÎÔÚÒ»¸öView»òÕßÒ»¸ölayerÉϼÓÒ»¸öshadowÄØ£¬QuartzCore¿ò¼ÜÊǺܶ࿪·¢ÕßµÄÑ¡Ôñ£º
UIView *view = [[UIView alloc] init]; view.layer.shadowOffset = CGSizeMake(-1.0f, 1.0f); view.layer.shadowRadius = 5.0f; view.layer.shadowOpacity = 0.6; |
¿´ÆðÀ´ºÜ¼òµ¥£¬¶Ô°É¡£¿ÉÊÇ£¬»µÏûÏ¢ÊÇʹÓÃÕâ¸ö·½·¨Ò²ÓÐËüµÄÎÊÌâ¡ Core Animation²»µÃ²»ÏÈÔÚºǫ́µÃ³öÄãµÄͼÐβ¢¼ÓºÃÒõÓ°È»ºó²ÅäÖȾ£¬Õ⿪ÏúÊǺܴóµÄ¡£
ʹÓÃshadowPathµÄ»°¾Í±ÜÃâÁËÕâ¸öÎÊÌ⣺
view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath]; |
ʹÓÃshadow pathµÄ»°iOS¾Í²»±ØÃ¿´Î¶¼¼ÆËãÈçºÎäÖȾ£¬ËüʹÓÃÒ»¸öÔ¤ÏȼÆËãºÃµÄ·¾¶¡£µ«ÎÊÌâÊÇ×Ô¼º¼ÆËãpathµÄ»°¿ÉÄÜÔÚijЩViewÖбȽÏÀ§ÄÑ£¬ÇÒÿµ±viewµÄframe±ä»¯µÄʱºòÄã¶¼ÐèҪȥupdate
shadow path.
ÎÒ¸üϲ»¶ÓÃCALayer×Ô¼º»Ò»¸öÒõÓ°³öÀ´£¬ÕâÑù¿ÉÒÔÉèÖÃÒõÓ°¹âÕ¤»¯£¬½ÚÊ¡´óÁ¿CPUµÄÔËË㣬»µ´¦¾ÍÊDZȽÏÏûºÄÄÚ´æ¡£ÒòΪÈç¹û¸øviewµÄlayerÉèÖùâÕ¤»¯µÄ»°Õû¸öView¶¼»á±äµÃÄ£ºý¡£ 20. ÓÅ»¯Table View
Table viewÐèÒªÓкܺõĹö¶¯ÐÔÄÜ£¬²»È»Óû§»áÔÚ¹ö¶¯¹ý³ÌÖз¢ÏÖ¶¯»µÄ覴á£
ΪÁ˱£Ö¤table viewƽ»¬¹ö¶¯£¬È·±£Äã²ÉÈ¡ÁËÒÔϵĴëÊ©:
ÕýȷʹÓÃreuseIdentifierÀ´ÖØÓÃcells
¾¡Á¿Ê¹ËùÓеÄview opaque£¬°üÀ¨cell×ÔÉí
±ÜÃâ½¥±ä£¬Í¼Æ¬Ëõ·Å£¬ºǫ́ѡÈË
»º´æÐиß
Èç¹ûcellÄÚÏÖʵµÄÄÚÈÝÀ´×Ôweb£¬Ê¹ÓÃÒì²½¼ÓÔØ£¬»º´æÇëÇó½á¹û
ʹÓÃshadowPathÀ´»ÒõÓ°
¼õÉÙsubviewsµÄÊýÁ¿
¾¡Á¿²»Ê¹ÓÃcellForRowAtIndexPath:£¬Èç¹ûÄãÐèÒªÓõ½Ëü£¬Ö»ÓÃÒ»´ÎÈ»ºó»º´æ½á¹û
ʹÓÃÕýÈ·µÄÊý¾Ý½á¹¹À´´æ´¢Êý¾Ý
ʹÓÃrowHeight, sectionFooterHeightºÍ sectionHeaderHeightÀ´É趨¹Ì¶¨µÄ¸ß£¬²»ÒªÇëÇódelegate 21.Ñ¡ÔñÕýÈ·µÄÊý¾Ý´æ´¢Ñ¡Ïî
µ±´æ´¢´ó¿éÊý¾ÝʱÄã»áÔõô×ö£¿
ÄãÓкܶàÑ¡Ôñ£¬±ÈÈ磺
ʹÓÃNSUerDefaults
ʹÓÃXML, JSON, »òÕß plist
ʹÓÃNSCoding´æµµ
ʹÓÃÀàËÆSQLiteµÄ±¾µØSQLÊý¾Ý¿â
ʹÓà Core Data
NSUserDefaultsµÄÎÊÌâÊÇʲô£¿ËäÈ»ËüºÜniceÒ²ºÜ±ã½Ý£¬µ«ÊÇËüÖ»ÊÊÓÃÓÚСÊý¾Ý£¬±ÈÈçһЩ¼òµ¥µÄ²¼¶ûÐ͵ÄÉèÖÃÑ¡ÏÔÙ´óµãÄã¾ÍÒª¿¼ÂÇÆäËü·½Ê½ÁË
XMLÕâÖֽṹ»¯µµ°¸ÄØ£¿×ÜÌåÀ´Ëµ£¬ÄãÐèÒª¶ÁÈ¡Õû¸öÎļþµ½ÄÚ´æÀïÈ¥½âÎö£¬ÕâÑùÊǺܲ»¾¼ÃµÄ¡£Ê¹ÓÃSAXÓÖÊÇÒ»¸öºÜÂé·³µÄÊÂÇé¡£
NSCoding£¿²»ÐÒµÄÊÇ£¬ËüÒ²ÐèÒª¶ÁдÎļþ£¬ËùÒÔÒ²ÓÐÒÔÉÏÎÊÌâ¡£
ÔÚÕâÖÖÓ¦Óó¡¾°Ï£¬Ê¹ÓÃSQLite »òÕß Core Data±È½ÏºÃ¡£Ê¹ÓÃÕâЩ¼¼ÊõÄãÓÃÌØ¶¨µÄ²éѯÓï¾ä¾ÍÄÜÖ»¼ÓÔØÄãÐèÒªµÄ¶ÔÏó¡£
ÔÚÐÔÄܲãÃæÀ´½²£¬SQLiteºÍCore DataÊǺÜÏàËÆµÄ¡£ËûÃǵIJ»Í¬ÔÚÓÚ¾ßÌåʹÓ÷½·¨¡£Core Data´ú±íÒ»¸ö¶ÔÏóµÄgraph
model£¬µ«SQLite¾ÍÊÇÒ»¸öDBMS¡£AppleÔÚÒ»°ãÇé¿öϽ¨ÒéʹÓÃCore Data£¬µ«ÊÇÈç¹ûÄãÓÐÀíÓɲ»Ê¹ÓÃËü£¬ÄÇô¾ÍȥʹÓøü¼Óµ×²ãµÄSQLite°É¡£
Èç¹ûÄãʹÓÃSQLite£¬Äã¿ÉÒÔÓÃFMDB(https://GitHub.com/ccgus/fmdb)Õâ¸ö¿âÀ´¼ò»¯SQLiteµÄ²Ù×÷£¬ÕâÑùÄã¾Í²»Óû¨ºÜ¶à¾ÀúÁ˽âSQLiteµÄC
APIÁË¡£ 23. ʹÓÃAutorelease Pool
NSAutoreleasePool¸ºÔðÊÍ·ÅblockÖеÄautoreleased objects¡£Ò»°ãÇé¿öÏÂËü»á×Ô¶¯±»UIKitµ÷Óᣵ«ÊÇÓÐЩ״¿öÏÂÄãÒ²ÐèÒªÊÖ¶¯È¥´´½¨Ëü¡£
¼ÙÈçÄã´´½¨ºÜ¶àÁÙʱ¶ÔÏó£¬Äã»á·¢ÏÖÄÚ´æÒ»Ö±ÔÚ¼õÉÙÖ±µ½ÕâЩ¶ÔÏó±»releaseµÄʱºò¡£ÕâÊÇÒòΪֻÓе±UIKitÓùâÁËautorelease
poolµÄʱºòmemory²Å»á±»ÊÍ·Å¡£ºÃÏûÏ¢ÊÇÄã¿ÉÒÔÔÚÄã×Ô¼ºµÄ@autoreleasepoolÀï´´½¨ÁÙʱµÄ¶ÔÏóÀ´±ÜÃâÕâ¸öÐÐΪ£º
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. */ } } |
Õâ¶Î´úÂëÔÚÿ´Î±éÀúºóÊÍ·ÅËùÓÐautorelease¶ÔÏó 24. Ñ¡ÔñÊÇ·ñ»º´æÍ¼Æ¬
³£¼ûµÄ´ÓbundleÖмÓÔØÍ¼Æ¬µÄ·½Ê½ÓÐÁ½ÖÖ£¬Ò»¸öÊÇÓÃimageNamed£¬¶þÊÇÓÃimageWithContentsOfFile£¬µÚÒ»ÖֱȽϳ£¼ûÒ»µã¡£
¼ÈÈ»ÓÐÁ½ÖÖÀàËÆµÄ·½·¨À´ÊµÏÖÏàͬµÄÄ¿µÄ£¬ÄÇôËûÃÇÖ®¼äµÄ²î±ðÊÇÊ²Ã´ÄØ£¿
imageNamedµÄÓŵãÊǵ±¼ÓÔØÊ±»á»º´æÍ¼Æ¬¡£imageNamedµÄÎĵµÖÐÕâô˵:Õâ¸ö·½·¨ÓÃÒ»¸öÖ¸¶¨µÄÃû×ÖÔÚϵͳ»º´æÖвéÕÒ²¢·µ»ØÒ»¸öͼƬ¶ÔÏóÈç¹ûËü´æÔڵϰ¡£Èç¹û»º´æÖÐûÓÐÕÒµ½ÏàÓ¦µÄͼƬ£¬Õâ¸ö·½·¨´ÓÖ¸¶¨µÄÎĵµÖмÓÔØÈ»ºó»º´æ²¢·µ»ØÕâ¸ö¶ÔÏó¡£
Ïà·´µÄ£¬imageWithContentsOfFile½ö¼ÓÔØÍ¼Æ¬¡£
ÏÂÃæµÄ´úÂë˵Ã÷ÁËÕâÁ½ÖÖ·½·¨µÄÓ÷¨:
UIImage *img = [UIImage imageNamed:@"myImage"];// caching
// or
UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"];//
no caching |
ÄÇôÎÒÃÇÓ¦¸ÃÈçºÎÑ¡ÔñÄØ£¿
Èç¹ûÄãÒª¼ÓÔØÒ»¸ö´óͼƬ¶øÇÒÊÇÒ»´ÎÐÔʹÓã¬ÄÇô¾Íû±ØÒª»º´æÕâ¸öͼƬ£¬ÓÃimageWithContentsOfFile×ãÒÓ£¬ÕâÑù²»»áÀË·ÑÄÚ´æÀ´»º´æËü¡£
È»¶ø£¬ÔÚͼƬ·´¸´ÖØÓõÄÇé¿öÏÂimageNamedÊÇÒ»¸öºÃµÃ¶àµÄÑ¡Ôñ¡£ 25. ±ÜÃâÈÕÆÚ¸ñʽת»»
Èç¹ûÄãÒªÓÃNSDateFormatterÀ´´¦ÀíºÜ¶àÈÕÆÚ¸ñʽ£¬Ó¦¸ÃСÐÄÒÔ´ý¡£¾ÍÏñÏÈǰÌáµ½µÄ£¬ÈκÎʱºòÖØÓÃNSDateFormatters¶¼ÊÇÒ»¸öºÃµÄʵ¼ù¡£
È»¶ø£¬Èç¹ûÄãÐèÒª¸ü¶àËÙ¶È£¬ÄÇôֱ½ÓÓÃCÊÇÒ»¸öºÃµÄ·½°¸¡£Sam SoffesÓÐÒ»¸ö²»´íµÄÌû×Ó(http://soff.es/how-to-drastically-improve-your-app-with-an-afternoon-and-instruments)ÀïÃæÓÐһЩ¿ÉÒÔÓÃÀ´½âÎöISO-8601ÈÕÆÚ×Ö·û´®µÄ´úÂ룬¼òµ¥ÖØÐ´Ò»Ï¾ͿÉÒÔÄÃÀ´ÓÃÁË¡£
àÅ£¬Ö±½ÓÓÃCÀ´¸ã£¬¿´ÆðÀ´²»´íÁË£¬µ«ÊÇÄãÏàÐÅÂð£¬ÎÒÃÇ»¹ÓиüºÃµÄ·½°¸£¡
Èç¹ûÄã¿ÉÒÔ¿ØÖÆÄãËù´¦ÀíµÄÈÕÆÚ¸ñʽ£¬¾¡Á¿Ñ¡ÔñUnixʱ¼ä´Á¡£Äã¿ÉÒÔ·½±ãµØ´Óʱ¼ä´Áת»»µ½NSDate:
- (NSDate*)dateFromUnixTimestamp:(NSTimeInterval)timestamp {
return[NSDate dateWithTimeIntervalSince1970:timestamp];
} |
ÕâÑù»á±ÈÓÃCÀ´½âÎöÈÕÆÚ×Ö·û´®»¹¿ì£¡ÐèҪעÒâµÄÊÇ£¬Ðí¶àweb API»áÒÔ΢ÃëµÄÐÎʽ·µ»ØÊ±¼ä´Á£¬ÒòΪÕâÖÖ¸ñʽÔÚjavascriptÖиü·½±ãʹÓ᣼ÇסÓÃdateFromUnixTimestamp֮ǰ³ýÒÔ1000¾ÍºÃÁË¡£
|