iOS Performance optimizations

Source: Internet
Author: User
Tags gcd set background

Written in front of this article from iOS Tutorial Team Marcelo Fabri, he is an iOS programmer for movile. This is his personal website: http://www.marcelofabri.com/, you can also follow @marcelofabri_ on Twitter. Performance is especially important for IOS apps, and if your app is unresponsive or slow, frustrated users will fill their disappointment with App store reviews. However, due to the limitations of iOS devices, it is sometimes difficult to do well in performance. There are a lot of things you need to be aware of during the development process, and it's easy to forget about the performance impact when making your choice. That's why I wrote this article. This article integrates 25 tips and tricks that you can use to improve your app's performance in a convenient checklist. Please read this article patiently and make a quick note for your future app! Note: Before you optimize your code, you should be aware of a problem and don't get into the wrong habit of "pre-optimized" code. Always use instruments to profile your code to discover areas that need to be promoted. Matt Galloway wrote a great article on how to use instruments to optimize your code. Also note that some of the recommendations listed here come at a cost, and the suggested way to increase the speed of the app or make it more efficient, but it may take a lot of effort to apply or make the code more complex, so choose carefully. Table of Contents The advice I'm going to give will be divided into three different levels: entry, intermediate and progressive: entry level (This is a recommendation that you will always use in your app development) 1. Manage memory with ARC 2. Use Reuseidentifier 3 in the right place. Make the views opaque as much as possible 4. Avoid the huge xib 5. Do not block the main thread 6. Resize the image in image views by 7. Select the correct collection 8. Turn on gzip compression intermediate (these are likely to be used in some relatively complex cases) 9. Reuse and delay loading views 10.    cache, cache, or cache! 11. Weigh the rendering method 12. Handling Memory Warning 13. Reuse objects with large overhead 14. Use Sprite Sheets 15. Avoid repeated processing of data 16. Select the correct data format 17. Set background Images 18 correctly. Reduce the use of Web feature 19.   Set Shadow Path 20. Optimize your table View 21. Choose the right data storage option into the class (these recommendations should only be used if you are sure they can solve the problem and are handy) 22. Accelerated start time 23. Use Autorelease Pool 24. Choose whether to cache picture 25. Try to avoid date format conversion No need to repeat, let's get to the point ~ Beginner performance Improvement This section is dedicated to some basic changes that can improve performance. But all levels of developers are likely to get some boost from a small performance memo documenting some of the neglected projects. 1. Using Arc to manage memory arc (Automatic Reference counting, auto reference count) and iOS5 with the release, it avoids the most common is often because we forget to release memory caused by memory leaks. It automatically manages the retain and release process for you, so you don't have to intervene manually. Here's the code snippet you'll often use to create a view: 1234UIView *view = [[UIView alloc] init]; // ... [Self.view Addsubview:view]; [View release]; Forgetting the release at the end of the snippet is just as easy as remembering to eat. and arc will automatically do the work for you at the bottom. In addition to helping you avoid memory leaks, ARC can also help you improve performance, which guarantees the release of memory for objects that are no longer needed. What time is it, you should use arc! in all your projects here are some more learning resources about ARC: Apple's official documentation Matthijs Hollemans ' s Beginning arc in IOS Tutorial Tony Dahbura's how to Enable ARC in a cocos2d 2.X Project If you still aren ' t convinced of the benefits of ARC, check out this article the eight myths about arc to really convince what you are should be using it! Arc certainly cannot exclude all memory leaks for you. Because of blocking, retain cycles, Managing imperfect Corefoundation object (and C structure) or is the code too bad still canCause a memory leak. Here's a great article about what arc can't do and how we do it http://conradstoll.com/blog/2013/1/19/blocks-operations-and-retain-cycles.html. 2. Using Reuseidentifier in the right place a common mistake in development is not giving Uitableviewcells, Uicollectionviewcells, Even the uitableviewheaderfooterviews set the correct reuseidentifier. For performance optimization, table view uses ' Tableview:cellforrowatindexpath: ' To allocate cells for rows, and its data should be reused from UITableViewCell. A table view maintains a queue of data UITableViewCell objects that can be reused. If you do not use Reuseidentifier, you will have to set up a new cell for each row of table view. This has a significant impact on performance, especially when the app's scrolling experience is greatly compromised. Since iOS6, you should also use Reuseidentifiers in the header and footer views in addition to Uicollectionview cells and supplemental views. To use Reuseidentifiers, add this method to the data source object when adding a new Cell in a table view: 12static nsstring *cellidentifier = @ "cell "; UITableViewCell *cell = [TableView dequeuereusablecellwithidentifier:cellidentifier Forindexpath:indexpath]; This method excludes those cells that already exist from the queue, or creates a new cell with a previously registered nib or class if necessary. If you do not have a reusable cell and you are not registering a class or NIB, this method returns nil. 3. Set the views as opaque if you have opaque views, you should set their opaque property to Yes. The reason is that this allows the system to render these views in an optimal manner. This simple attribute can be set in IB or in the code. Apple documents are not transparent to the image setThe description of the sex is: (opaque) This property gives the rendering system a hint on how to handle the view. If set to Yes, the rendering system considers the view to be completely opaque, which allows the rendering system to optimize some rendering processes and improve performance. If set to no, the rendering system is normally composed of this view with other content. The default value is yes. In a relatively static picture, setting this property does not have much effect. However, when this view is embedded in the scroll view, or is part of a complex animation, not setting this property will greatly affect the performance of the app. You can use the Debug\color blended layers option in the simulator to discover which view is not set to opaque. The goal is to set the opaque to be opaque! 4. Avoid too large a storyboards (XIBiOS5) that is added to the xib is rapidly replacing it. However, Xib is still useful in some scenarios. For example, your app needs to adapt to iOS5 devices, or you have a custom reusable view that you'll inevitably need to use. If you have to xib, make them as simple as possible. Try to configure a separate xib for each controller, as much as possible to scatter a view controller's view hierarchy into a separate xib. It is important to note that when you load a xib, everything is placed in memory, including any images. If you have a view that is not immediately available, you are wasting valuable memory resources. Storyboards is another thing, storyboard. Instantiate a view controller only when needed. The xib is, all the pictures are Chache, if you are doing OS X development, the sound files are also. Apple's description in the relevant documentation is that when you load a nib that references a picture or a sound resource, the nib loading code writes the picture and sound file into memory. In OS X, the picture and sound resources are cached in the named cache for future use. In iOS, only picture resources are stored in named caches. Depending on the platform you are on, use Nsimage or UIImage's ' imagenamed: ' method to get the picture resource. Obviously, the same thing happened in storyboards, but I didn't find any documentation to support this conclusion. If you understand this operation, write to me! To learn more about storyboards, you can see Matthijs Hollemans beginning storyboards in IOS 5 Part 1 and Part 2 5. Do not block the main thread from ever taking too much of the main thread. Because Uikit does all the work on the main thread, rendering, managing touch reactions, responding to input, etc. all need to be done on it. The risk of using the main thread all the time is that if your code really blocks the main thread, your app will lose its response. This... It's a shortcut to getting a star in the App Store: Most of the things that block the main process are that your app is doing I/O operations that involve reading and writing external resources, such as storage or networking. You can use ' nsurlconnection ' to do network operations asynchronously: + (void) Sendasynchronousrequest: (nsurlrequest *) request queue: (Nsoperationqueue *) Queue Completionhandler: (void (^) (nsurlresponse*, nsdata*, nserror*)) handler or use a framework like afnetworking to do these things asynchronously. If you need to do other types of operations that require significant resources (such as time-sensitive computing or storage read-write), use the Grand central Dispatch, or Nsoperation and Nsoperationqueues. The following code is a template that uses GCD 12345678dispatch_async (Dispatch_get_global_queue (dispatch_queue_priority_ DEFAULT, 0), ^{//switch to a background thread and perform your expensive operation Dispatch_async (dispatch_get_m Ain_queue (), ^{//switch back to the main thread to update your UI}); Is there a nested ' dispatch_async ' in the discovery code? This is because any Uikit-related code needs to be done on the main thread. If you are interested in the details of nsoperation or GCD, look at Ray Wenderlich's multithreading and Grand central Dispatch on IOS for beginners and Sohei L AzarpouHow to use Nsoperations and nsoperationqueues tutorials for R. 6. Resizing a picture in image views if you want to display a picture from the bundle in ' Uiimageview ', you should make sure that the size of the picture is the same as the size of the Uiimageview. Scaling the picture in the run is very resource-intensive, especially if ' Uiimageview ' is nested in ' Uiscrollview '. If the picture is loaded from the remote service and you can't control the size of the image, such as resizing before downloading, you can do it with background thread, and then use the scaled image in Uiimageview. 7. Choose the right collection learn the most appropriate class or object for a business scenario is the basis for writing high-energy-efficient code. This sentence is especially true when dealing with collections. Apple has a collections programming Topics document that details the differences between the available classes and what scenarios you should use them in. This is a must-read document for anyone who uses collections. Oh, I knew you because too long did not see ... This is a summary of some common collection: Arrays: An ordered set of values.    Using index to lookup quickly, using value lookup is slow, and insert/delete is slow. Dictionaries: Stores key-value pairs.    Use keys to find faster. Sets: An unordered set of values. Use values to find quick, insert/delete soon. 8. Open gzip compression A large number of apps rely on remote resources and third-party APIs, and you may develop an app that needs to download XML, JSON, HTML, or other formats from the far end. The problem is that we're targeting mobile devices, so you can't count on how good the network is. One user is still on the edge network, and the next minute may switch to 3G. No matter what the scene, you certainly don't want your users to wait too long. One way to reduce the document is to open gzip on the server and in your app. This will have a more significant effect on the type of data that can have a higher compression rate. The good news is that iOS already supports GZIP compression by default in Nsurlconnection, and of course afnetworking these frameworks based on it. These cloud service providers, like Google App engine, have also supported compressed output. If you do not know how to use Apache or IIS (server) to open gzip, you can read this article. Intermediate Performance Boost YouHave you mastered the above-mentioned basic-level optimization schemes? But the reality is that sometimes some solutions are not as obvious as those, and they often depend heavily on how you structure and write your app. The following recommendations are for these scenarios. 9. Reuse and lazy loading (lazy load) views More views means more rendering, which is more CPU and memory consumption, especially for apps that have nested a lot of view inside Uiscrollview. The trick we use here is to imitate the actions of ' uitableview ' and ' uicollectionview ': don't create all subview at once, but create them when needed, and when they do, put them into a reusable queue. In this case, you only need to create your views when scrolling occurs, avoiding the cost-effective allocation of memory. The energy efficiency issue of creating views also applies to other aspects of your app. Imagine a scene where a user needs to render a view when they click on a button. There are two ways to implement this: 1. Create and hide this view when this screen is loaded, show it when needed, 2. Created and presented when needed. Each scenario has its pros and cons. In the first scenario, because you need to create a view from the beginning and keep it until it is no longer in use, it consumes more memory. However, this will also make your app more sensitive because it only needs to change the visibility of the view when the user taps the button. The second scenario, in contrast, consumes less memory, but it is slightly slower than the first when the button is clicked. cache, cache, or cache! an excellent principle is that the cache is what is needed, which is something that is unlikely to change but needs to be read frequently. What can we cache? Some of the options are remote server responses, images, and even calculation results, such as UITableView line Heights. Nsurlconnection default caches the resources in memory or in storage based on the HTTP Headers it loads. You can even manually create a nsurlrequest and then make it load only the cached values. Here is an available code snippet that you can use to create a nsurlrequest and cache it for a picture that doesn't change: 12345678910+ (Nsmutableurlrequest *) Imagerequestwithurl: (     Nsurl *) URL {nsmutableurlrequest *request = [Nsmutableurlrequest Requestwithurl:url]; Request. CachePolicy = Nsurlrequestreturncachedataelseload; This would make sure the request always returns the cached image request.    Httpshouldhandlecookies = NO; Request.    httpshouldusepipelining = YES;     [Request addvalue:@ "image/*" forhttpheaderfield:@ "Accept"]; return request;} Note that you can get a URL request via Nsurlconnection, afnetworking is the same. This way you don't have to change all the networking code to use this tip. If you want to learn more about HTTP caching, Nsurlcache, nsurlconnection, you can read this article () If you need to cache other things that are not HTTP request, you can use Nscache. Nscache and Nsdictionary are similar, the difference is that when the system reclaims memory, it will automatically delete its contents. Mattt Thompson has a great article about it: http://nshipster.com/nscache/If you're interested in HTTP, you can read Google's best-practices document on HTTP Caching 11. Weigh the rendering method there are many ways to make beautiful buttons in iOS. You can use the whole picture, resizable pictures, Uozhe can be used Calayer, coregraphics even OpenGL to draw them. Of course, each of the different solutions have different complexity and corresponding performance. One of the Apple UIKit team members Andy Matuschak recommended a great post on graphic performance is worth reading. In a nutshell, it's faster to use a pre-rendered picture, because iOS eliminates the program that creates a picture and then draws something up and then displays it on the screen. The problem is that you need to put all the images you need into the app bundle, which adds to the volume – this is a better place to use a variable-sized picture: You can save some unnecessary space and do not need to make different diagrams for different elements (such as buttons). However, using the pictureIt also means that you have lost the flexibility of using the code to adjust the picture, you need to repeatedly re-do them over and over again, it is a waste of time, and if you want to do an animated effect, although each picture is only a few details of the changes you need a lot of pictures resulting in the increasing size of the bundle. In the end, you need to weigh the pros and cons, whether you want performance or bundle to keep the right size. 12. Handling Memory Warnings iOS notifies all running apps when the system is low on memory. In the official documentation: if your app receives a memory warning, it needs to release as much memory as possible. The best way is to remove the strong references to the cache, the picture object, and some other objects that can be recreated. Fortunately, Uikit provides several ways to collect low-memory warnings: Use in app delegate ' Applicationdidreceivememorywarning: ' method overrides ' Didreceivememorywarning ' in your custom Uiviewcontroller subclass (subclass) to register and receive Uiapplicationdidreceivememorywarningnotification notifications Once you receive such notifications, you will need to release any unnecessary memory usage. For example, the default behavior of Uiviewcontroller is to remove some invisible view, and some of its subclasses can supplement this method by deleting some additional data structures. An app with a picture cache can remove images that are not displayed on the screen. This is necessary to handle the memory alert, and if you do not pay attention to it, your app may be killed by the system. However, when you have to make sure that the object you have chosen can be recreated and created to free up memory. Be sure to test it in development with a memory alert simulation in the simulator. 13. Reusing large overhead objects reuse expensive objects some objects are very slow to initialize, such as NSDateFormatter and Nscalendar. However, you will inevitably need to use them, such as parsing data from JSON or XML. To avoid using this object's bottlenecks you need to reuse them, either by adding attributes to your class or by creating static variables. Note that if you choose the second method, the object will persist in memory while your app is running, similar to the Singleton (singleton). The following code illustrates the use of a property to delay loading a date formatter. It creates a new instance at the first call, and the subsequent call returns an instance that has already been created: 123456789101112//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 (! _forma        tter) {_formatter = [[NSDateFormatter alloc] init]; _formatter.dateformat = @ "EEE MMM dd HH:mm:ss Z yyyy"; Twitter date format} return _formatter; It is also important to note that the speed of setting up a nsdateformatter is almost as slow as creating a new one! So if your app needs to be processed on a regular date format, you'll get a little performance boost from this approach. 14. Using Sprite sheets are you a game developer, then sprite sheets must be one of your best friends. Sprite sheet can make rendering faster, and even save memory than standard screen rendering methods. We have two good tutorials on sprites: How to use animations and sprites Sheets in cocos2d how to Create and Optimize sprites Sheets in Cocos2d with Texture Packer and Pixel formats the second tutorial covers the details of the Pixel format that may affect your game performance to a large extent. If you are not familiar with Spirte sheet, you can look at these two (youtube) videos Spritesheets–the Movie, part 1 and Part 2. The author of the video is one of the most popular tools for creating sprite sheet texture Packer, author of Andreas L?w. In addition to using sprite sheets, other suggestions written here can of course also be used in game development. For example, you need a lot of sprite sheets, like enemies, missilesClass, you can reuse these sprites without having to recreate them every time. 15. Avoid repetitive processing of data many applications require data that is often JSON or XML-formatted to be loaded from the server. It is important to use the same data structure on both the server side and the client. It is expensive to manipulate the data in memory so that they meet your data structure. For example, if you need data to show a table view, it is best to take the array structure data directly from the server to avoid additional intermediate data structure changes. Similarly, if you need to fetch data from a specific key, then you use the dictionary of the key-value pair. 16. Choose the right data format there are many scenarios for transferring data between apps and Web services, the most common being JSON and XML. You need to choose the one that is most appropriate for your app. Parsing JSON is a bit faster than XML, and JSON is usually smaller and easier to transfer. The official built-in JSON deserialization from IOS5 is more convenient to use. But XML also has the benefit of XML, such as parsing XML using sax, like parsing a local file, and you don't have to wait for the entire document to be downloaded to parse like parsing the JSON. When you deal with very large data, it can greatly reduce memory consumption and increase performance. 17. Set the background image correctly in view the background image is like many other iOS programming methods: Use Uicolor's colorwithpatternimage to set the background color, and add a uiimageview as a child view in the view. If you use full-frame backgrounds, you must use Uiimageview because Uicolor's colorwithpatternimage is used to create small duplicate images as backgrounds.  In this case, the use of Uiimageview can save a lot of memory: 123//You could also achieve the same result in Interface builderuiimageview *backgroundview = [[Uiimageview alloc] initwithimage:[uiimage imagenamed:@ "background"]; [Self.view Addsubview:backgroundview]; If you create a background with a small tiling, you need to use the colorwithpatternimage of Uicolor to do it, It will render faster and will not cost much memory: 1self.view.backgroundcolor = [UICOlor colorwithpatternimage:[uiimage imagenamed:@ "background"]; 18. Reduce the use of Web features UIWebView is very useful, it is very easy to use it to display the content of the Web page or create Uikit difficult to do animation effect is very simple thing. But you may have noticed that UIWebView is not as fast as driving safari. This is due to the webkit of the Nitro engine which features the JIT compilation. So if you want higher performance, you need to tweak your HTML. The first thing to do is to remove unnecessary javascript as much as possible and avoid using too large a frame. It's better to use only native JS. In addition, it is possible to asynchronously load JavaScript such as user behavior statistics script, which does not affect page representations. Finally, always pay attention to the pictures you use to ensure that the pictures match the size you use. Use sprite sheet to increase loading speed and save memory. More information can be seen under WWDC session #601 –optimizing Web Content in Uiwebviews and Websites on IOS 19. Set shadow path How to add a shadow to a view or a layer, the Quartzcore framework is a choice for many developers: 123456789#import <quartzcore/quartzcore.h >//Somewhere later ... UIView *view = [[UIView alloc] init]; Setup the Shadow View.layer.shadowOffset = Cgsizemake ( -1.0f, 1.0f); View.layer.shadowRadius = 5.0f; view.layer.shadowOpacity = 0.6; it looks very simple, right. However, the bad news is that using this method also has its problems ... Core animation has to get your graphics back in the background and add a shadow before rendering, which is a huge expense. Using Shadowpath avoids this problem: View.layer.shadowPath = [[Uibezierpath bezierPathWithRect:view.bounds] cgpath]; use Shadow Path, iOS doesn't have to calculate how to render every time, it makesUse a pre-computed path. But the problem is that your own path may be difficult in some view, and you need to update shadow path whenever the frame of the view changes. Want to know more you can see Mark Pospesel's article. 20. Optimizing the table viewtable view requires good scrolling performance, otherwise the user will discover the artifacts of the animation during scrolling.    To ensure a smooth scrolling of table view, make sure you take the following actions: Use ' reuseidentifier ' to reuse cells as much as possible to make all view opaque, including the cell itself, avoid gradients, picture scaling, background cache row Height If the real content in the cell comes from the web, using asynchronous loading, the cache request result uses ' Shadowpath ' to draw shadows to reduce the number of subviews as far as possible ' Cellforrowatindexpath: ' If you need to use it, use it only once and then slow The results are stored using the correct data structure to use the ' rowHeight ', ' sectionfooterheight ' and ' sectionheaderheight ' to set the fixed high and do not request delegate21. Choose the right data storage options What do you do when you store large chunks of data? You have a lot of options, such as using ' nsuerdefaults ' with XML, JSON, or plist using a nscoding archive using a local SQL database like SQLite using Core Datansuserdefau What is the problem with LTS? Although it is very nice and convenient, but it only applies to small data, such as some simple Boolean set options, and then you need to consider other ways XML this structured file? Overall, you need to read the entire file into memory to parse it, which is very economical. Using sax is another tricky thing to do. Nscoding? Unfortunately, it also needs to read and write files, so there are the above problems. In this scenario, it is better to use SQLite or Core data. Using these techniques, you can load only the objects you need with specific query statements. In terms of performance, SQLite and core data are very similar. Their difference is in the use of specific methods. Core data represents the graph model of an object, but SQLite is a DBMS. Apple generally recommends the use of core Data, but if you haveReason not to use it, then go to the bottom of the SQLite bar. If you use SQLite, you can use Fmdb (Https://github.com/ccgus/fmdb) This library to simplify the operation of SQLite, so you do not have to spend a lot of experience to understand SQLite C API. Advanced performance tips Would you like some of the elite advice you have to be a program ape ninja? Here are some tips to help you optimize your app to the fullest! 22. Accelerated startup time it is important to quickly open the app, especially when the user first opens it, and the first impression is too important for the app. All you can do is make it do as many asynchronous tasks as possible, such as loading the remote or database data and parsing the data. Or that sentence, avoid too large a xib, because they are loaded on the main thread. So try to use storyboards without this problem! Note that watchdog does not run when you debug with Xcode, so be sure to disconnect the device from Xcode to test the boot speed by 23. Use autorelease Pool ' NSAutoreleasePool ' to release autoreleased objects in block. In general, it is automatically called by the Uikit. But there are situations where you need to create it manually. If you create a lot of temporary objects, you will find that the memory has been reduced until the objects are release. This is because the memory will only be released when the Uikit runs out of Autorelease pool. The good news is that you can create temporary objects in your own @autoreleasepool to avoid this behavior: 123456789NSArray *urls = <# An array of file URLs #>;for (Nsurl *url in        URLs) {@autoreleasepool {nserror *error; NSString *filecontents = [NSString stringwithcontentsofurl:url Encoding:nsutf8stri        Ngencoding error:&error]; /* Process The string, creating and autoreleasing more objects. */}} This code releases all autor after each traversalElease objects more about NSAutoreleasePool please refer to the official documentation. 24. Choose whether to cache pictures the common way to load images from bundles is two, one with ' imagenamed ' and two with ' Imagewithcontentsoffile ', the first more common. Since there are two similar approaches to achieving the same goal, what is the difference between them? The advantage of ' imagenamed ' is that images are cached when loaded. The ' imagenamed ' document says: This method finds and returns a picture object in the system cache with a specified name if it exists. If the corresponding picture is not found in the cache, this method loads from the specified document and then caches and returns the object. Instead, ' imagewithcontentsoffile ' loads only the pictures. The following code illustrates the use of these two methods: 123UIImage *img = [UIImage imagenamed:@ "MyImage"]; Caching//or UIImage *img = [UIImage imagewithcontentsoffile:@ "MyImage"]; No caching so how should we choose? If you want to load a large picture and use it once, then there is no need to cache the image, using ' imagewithcontentsoffile ' so that it does not waste memory to cache it. However, the ' imagenamed ' is a much better choice in the case of repeated reuse of images. 25. Avoid date format conversions If you want to use ' nsdateformatter ' to handle many date formats, you should be careful. As mentioned earlier, reusing ' nsdateformatters ' at any time is a good practice. However, if you need more speed, then using C directly is a good solution. Sam Soffes has a nice post (http://soff.es/how-to-drastically-improve-your-app-with-an-afternoon-and-instruments) There are some code that can be used to parse the ISO-8601 date string, and simply rewrite it to use it. Well, just use C to make it look good, but do you believe that we have a better plan! If you can control the date format you are working with, try to choose a Unix timestamp. You can easily convert from timestamp to nsdate:123-(nsdate*) Datefromunixtimestamp: (nstimeinterval) timestamp {return [nsdate Datewithtimeintervalsince1970:timestamp];} This will be faster than using C to parse the date string! It is important to note that many Web APIs return timestamps in microseconds, because this format is easier to use in JavaScript. Remember to divide the ' datefromunixtimestamp ' before dividing it by 1000. Read more about these WWDC videos strongly recommended for developers who want to improve app performance.    You first need to make sure that you have your Apple ID registered as a developer to see the WWDC 2012 video here. #406: Adopting Automatic Reference counting #238: iOS app Performance:graphics and animations #242: iOS app Perform     Ance:memory #235: IOS App performance:responsiveness #409: Learning Instruments #706: Networking Best Practices  #514: OpenGL ES Tools and techniques #506: Optimizing 2D Graphics and Animation performance #601: Optimizing Web Content in Uiwebviews and Websites to IOS #225: Up and running:making a great impression with every launch some 01-year WWDC View The frequency is also very valuable: #308: Blocks and Grand Central Dispatch in practice #323: Introducing Automatic Reference counting #312: IOS Performance and Power optimization with Instruments #105: Polishing Your app:tips and tricks to improve the respon SiVeness and Performance #121: Understanding UIKit Rendering Some other videos worth watching, mostly from iOS 5 Tech talks:your iOS App performance Hitlist Optimizing app Performance with Instruments understanding iOS View compositing based on Your iOS app performance H Itlist "This Michael Jurewitz video, Ole Begemann wrote a text summary of the article. Apple offers a very useful name called "Performance Tuning | Performance tuning "resources. –eof– about Luta



iOS Performance optimizations

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.