Performance Tips for IOS Application

Performance Tips for IOS Application

At each step in the development of your app, consider the implications of your design choices on the overall performance of your app. Power usage and memory consumption are extremely important considerations for iOS apps, and there are many other considerations as well. The following sections describe the factors you should consider throughout the development process.

1. Reduce Your App’s Power Consumption
Power consumption on mobile devices is always an issue. The power management system in iOS conserves power by shutting down any hardware features that are not currently being used. You can help improve battery life by optimizing your use of the following features:
  • The CPU
  • Wi-Fi, Bluetooth, and baseband (EDGE, 3G) radios
  • The Core Location framework
  • The accelerometers
  • The disk
The goal of your optimizations should be to do the most work you can in the most efficient way possible. You should always optimize your app’s algorithms using Instruments. But even the most optimized algorithm can still have a negative impact on a device’s battery life. You should therefore consider the following guidelines when writing your code:
  • Avoid doing work that requires polling. Polling prevents the CPU from going to sleep. Instead of polling, use the NSRunLoop or NSTimer classes to schedule work as needed.
  • Leave the idleTimerDisabled property of the shared UIApplication object set to NO whenever possible. The idle timer turns off the device’s screen after a specified period of inactivity. If your app does not need the screen to stay on, let the system turn it off. If your app experiences side effects as a result of the screen being turned off, you should modify your code to eliminate the side effects rather than disable the idle timer unnecessarily.
  • Coalesce work whenever possible to maximize idle time. It generally takes less power to perform a set of calculations all at once than it does to perform them in small chunks over an extended period of time. Doing small bits of work periodically requires waking up the CPU more often and getting it into a state where it can perform your tasks.
  • Avoid accessing the disk too frequently. For example, if your app saves state information to the disk, do so only when that state information changes, and coalesce changes whenever possible to avoid writing small changes at frequent intervals.
  • Do not draw to the screen faster than is needed. Drawing is an expensive operation when it comes to power. Do not rely on the hardware to throttle your frame rates. Draw only as many frames as your app actually needs.
  • If you use the UIAccelerometer class to receive regular accelerometer events, disable the delivery of those events when you do not need them. Similarly, set the frequency of event delivery to the smallest value that is suitable for your needs. For more information, see Event Handling Guide for iOS.

2. Use Memory Efficiently

Apps are encouraged to use as little memory as possible so that the system may keep more apps in memory or dedicate more memory to foreground apps that truly need it. There is a direct correlation between the amount of free memory available to the system and the relative performance of your app. Less free memory means that the system is more likely to have trouble fulfilling future memory requests.
To ensure there is always enough free memory available, you should minimize your app’s memory usage and be responsive when the system asks you to free up memory.

2.1 Observe Low-Memory Warnings

When the system dispatches a low-memory warning to your app, respond immediately. Low-memory warnings are your opportunity to remove references to objects that you do not need. Responding to these warnings is crucial because apps that fail to do so are more likely to be terminated. The system delivers memory warnings to your app using the following APIs:
Upon receiving any of these warnings, your handler method should respond by immediately freeing up any unneeded memory. Use the warnings to clear out caches and release images. If you have large data structures that are not being used, write those structures to disk and release the in-memory copies of the data.
If your data model includes known purgeable resources, you can have a corresponding manager object register for the UIApplicationDidReceiveMemoryWarningNotification notification and remove strong references to its purgeable resources directly. Handling this notification directly avoids the need to route all memory warning calls through the app delegate.


2.2 Reduce Your App’s Memory Footprint
Starting off with a low footprint gives you more room for expanding your app later. Table 7-1 lists some tips on how to reduce your app’s overall memory footprint
1. Eliminate memory leaks.
2. Make resource files as small as possible.
3. Use Core Data or SQLite for large data sets.
4. Load resources lazily.

Allocate Memory Wisely

1. Impose size limits on resources.

2. Avoid unbounded problem sets.


3. Tune Your Networking Code


The networking stack in iOS includes several interfaces for communicating over the radio hardware of iOS devices. The main programming interface is the CFNetwork framework, which builds on top of BSD sockets and opaque types in the Core Foundation framework to communicate with network entities. You can also use the NSStream classes in the Foundation framework and the low-level BSD sockets found in the Core OS layer of the system.
For information about how to use the CFNetwork framework for network communication, see CFNetwork Programming Guide and CFNetwork Framework Reference. For information about using the NSStream class, see Foundation Framework Reference.

3.1 Tips for Efficient Networking

Implementing code to receive or transmit data across the network is one of the most power-intensive operations on a device. Minimizing the amount of time spent transmitting or receiving data helps improve battery life. To that end, you should consider the following tips when writing your network-related code:
  • For protocols you control, define your data formats to be as compact as possible.
  • Avoid using chatty protocols.
  • Transmit data packets in bursts whenever you can.
Cellular and Wi-Fi radios are designed to power down when there is no activity. Depending on the radio, though, doing so can take several seconds. If your app transmits small bursts of data every few seconds, the radios may stay powered up and continue to consume power, even when they are not actually doing anything. Rather than transmit small amounts of data more often, it is better to transmit a larger amount of data once or at relatively large intervals.
When communicating over the network, packets can be lost at any time. Therefore, when writing your networking code, you should be sure to make it as robust as possible when it comes to failure handling. It is perfectly reasonable to implement handlers that respond to changes in network conditions, but do not be surprised if those handlers are not called consistently. For example, the Bonjour networking callbacks may not always be called immediately in response to the disappearance of a network service. The Bonjour system service immediately invokes browsing callbacks when it receives a notification that a service is going away, but network services can disappear without notification. This situation might occur if the device providing the network service unexpectedly loses network connectivity or the notification is lost in transit.

3.2 Using Wi-Fi

If your app accesses the network using the Wi-Fi radios, you must notify the system of that fact by including the UIRequiresPersistentWiFi key in the app’s Info.plist file. The inclusion of this key lets the system know that it should display the network selection dialog if it detects any active Wi-Fi hot spots. It also lets the system know that it should not attempt to shut down the Wi-Fi hardware while your app is running.
Note: Note that even when UIRequiresPersistentWiFi has a value of true, it has no effect when the device is idle (that is, screen-locked). The app is considered inactive, and although it may function on some levels, it has no Wi-Fi connection.

3.3 The Airplane Mode Alert

If your app launches while the device is in airplane mode, the system may display an alert to notify the user of that fact. The system displays this alert only when all of the following conditions are met:
  • Your app’s information property list (Info.plist) file contains the UIRequiresPersistentWiFi key and the value of that key is set to true.
  • Your app launches while the device is currently in airplane mode.
  • Wi-Fi on the device has not been manually reenabled after the switch to airplane mode.

4. Improve Your File Management

Minimize the amount of data you write to the disk. File operations are relatively slow and involve writing to the flash drive, which has a limited lifespan. Some specific tips to help you minimize file-related operations include:
  • Write only the portions of the file that changed, and aggregate changes when you can. Avoid writing out the entire file just to change a few bytes.
  • When defining your file format, group frequently modified content together to minimize the overall number of blocks that need to be written to disk each time.
  • If your data consists of structured content that is randomly accessed, store it in a Core Data persistent store or a SQLite database, especially if the amount of data you are manipulating could grow to more than a few megabytes.

5. Make App Backups More Efficient
Backups occur wirelessly via iCloud or when the user syncs the device with iTunes. During backups, files are transferred from the device to the user’s computer or iCloud account. The location of files in your app sandbox determines whether or not those files are backed up and restored. If your application creates many large files that change regularly and puts them in a location that is backed up, backups could be slowed down as a result. As you write your file-management code, you need to be mindful of this fact.

5.1 App Backup Best Practices

You do not have to prepare your app in any way for backup and restore operations. Devices with an active iCloud account have their app data backed up to iCloud at appropriate times. For devices that are plugged into a computer, iTunes performs an incremental backup of the app’s data files. However, iCloud and iTunes do not back up the contents of the following directories:
To prevent the syncing process from taking a long time, be selective about where you place files inside your app’s home directory. Apps that store large files can slow down the process of backing up to iTunes or iCloud. These apps can also consume a large amount of a user's available storage, which may encourage the user to delete the app or disable backup of that app's data to iCloud. With this in mind, you should store app data according to the following guidelines:
  • Critical data should be stored in the <Application_Data>/Documents directory. Critical data is any data that cannot be recreated by your app, such as user documents and other user-generated content.
  • Support files include files your application downloads or generates and that your application can recreate as needed. The location for storing your application’s support files depends on the current iOS version.
    • In iOS 5.1 and later, store support files in the <Application_Data>/Library/Application Support directory and add theNSURLIsExcludedFromBackupKey attribute to the corresponding NSURL object using the setResourceValue:forKey:error: method. (If you are using Core Foundation, add the kCFURLIsExcludedFromBackupKey key to your CFURLRef object using theCFURLSetResourcePropertyForKey function.) Applying this attribute prevents the files from being backed up to iTunes or iCloud. If you have a large number of support files, you may store them in a custom subdirectory and apply the extended attribute to just the directory.
    • In iOS 5.0 and earlier, store support files in the <Application_Data>/Library/Caches directory to prevent them from being backed up. If you are targeting iOS 5.0.1, see How do I prevent files from being backed up to iCloud and iTunes? for information about how to exclude files from backups.
  • Cached data should be stored in the <Application_Data>/Library/Caches directory. Examples of files you should put in the Caches directory include (but are not limited to) database cache files and downloadable content, such as that used by magazine, newspaper, and map apps. Your app should be able to gracefully handle situations where cached data is deleted by the system to free up disk space.
  • Temporary data should be stored in the <Application_Data>/tmp directory. Temporary data comprises any data that you do not need to persist for an extended period of time. Remember to delete those files when you are done with them so that they do not continue to consume space on the user's device.
Although iTunes backs up the app bundle itself, it does not do this during every sync operation. Apps purchased directly from a device are backed up when that device is next synced with iTunes. Apps are not backed up during subsequent sync operations, though, unless the app bundle itself has changed (because the app was updated, for example).
For additional guidance about how you should use the directories in your app, see File System Programming Guide.

5.2. Files Saved During App Updated

When a user downloads an app update, iTunes installs the update in a new app directory. It then moves the user’s data files from the old installation over to the new app directory before deleting the old installation. Files in the following directories are guaranteed to be preserved during the update process:

6. Move Work off the Main Thread

Be sure to limit the type of work you do on the main thread of your app. The main thread is where your app handles touch events and other user input. To ensure that your app is always responsive to the user, you should never use the main thread to perform long-running or potentially unbounded tasks, such as tasks that access the network. Instead, you should always move those tasks onto background threads. The preferred way to do so is to use Grand Central Dispatch (GCD) or NSOperation objects to perform tasks asynchronously.
Moving tasks into the background leaves your main thread free to continue processing user input, which is especially important when your app is starting up or quitting. During these times, your app is expected to respond to events in a timely manner. If your app’s main thread is blocked at launch time, the system could kill the app before it even finishes launching. If the main thread is blocked at quitting time, the system could similarly kill the app before it has a chance to write out crucial user data.

Comments

  1. Great topic for app developer.

    ReplyDelete
  2. Thanks for sharing this important information which give some tips about on this topic.
    iphone app development company

    ReplyDelete
  3. It 's an amazing article and useful for developers
    iOS App development Online Training

    ReplyDelete
  4. The biggest challenge that many of them face is how to create and update iOS apps for business needs. Organizations need developers who can provide custom iOS app development but the remuneration per hour is huge.

    ReplyDelete
  5. It then discusses multiple ways to overcome mobile technology challenges (e.g., new radio technologies and specialized devices optimized for medical, educational, or “Internet of things” applications). The authors predict that, in the two or three more generations, mobile phones use homescapes apk will have exciting advances to achieve the full benefits, especially in the area of healthcare, education, industry, daily life, learning, and collaborations, which will be more effective, productive, and creative.

    ReplyDelete
  6. Android APK, also referred to as application package files, are identified with contract killer 2 mod apk apk the extension ".apk". This is also the extension of JAR.

    ReplyDelete
  7. If you've not received your WAPDA electric bill or you might have lost it, or it has been damaged, then you don't have anything to be concerned about. You can obtain an exact duplicate from your mepco online bill without needing to go to mepco office. You can verify the amount of your bill by typing in your reference 14-digit code when you click the "Get Your mepco Duplicate bill" Get the mepco Duplicate bill" link. Pay your bill by printing a duplicate of the bill at any bank.

    ReplyDelete
  8. With over a million mobile applications for both iOS and android platforms, it is easy to jump on the mobile app bandwagon and get one for yourself. Especially in today's times, when creating a mobile app isn't rocket science. Mobile apps like a Blackmart alpha are fast, more people are using them and they are at the cornerstone of human and technology interaction in the modern world.

    ReplyDelete
  9. Shin splints cause pain at the front of the lower leg, which may occur during or after exercise. Runners with shin splints should opt for shoes that adequately cushion and support their feet.best running insoles for shin splints are also called medial tibial stress syndrome. They cause pain along the inner side of the shin bone, where the muscle attaches to the bone. Pain is the most common symptom, and the intensity can vary from person to person.

    ReplyDelete
  10. Its now very easy to received your WAPDA electric bill. If you lost your bill or been damaged then you don't worry about it. You can get the same duplicate copy of your mepco online bill without visiting the mepco office. To get the bill you need to enter your bill reference 14-digit code and click on get your mpco duplicate bill and you are done. The copy of the bill will be display and you can download or print it and now submit into your bank.

    ReplyDelete
  11. Very Interesting blog. Keep posting more articles.
    Check out the very useful info Andriod App Development!

    ReplyDelete
  12. Download Apk Latest Version of gloud games svip mod apk, The Action Game of Android, This Mod Menu Apk Includes Unlimited Money, Time, Svip, Unlocked All Games.

    ReplyDelete
  13. Android APK Game expert , also referred to as application package files, for dude theft wars mod menu to download & that are identified with the extension ".apk". This is also the extension of JAR.

    ReplyDelete
  14. https://applictions.blogspot.com/2021/09/hire-react-native-developers-to-build-mobile-apps.html?sc=1661929994575#c1319446211828852113

    ReplyDelete
  15. "Embark on a digital journey beyond limits with our تحميل لعبة bus simulator ultimate مهكرة اخر اصدار 2023 . Upgrade your simulation adventure with exclusive features, realistic controls, and a fleet of customizable buses. It's time to redefine your virtual driving experience."

    ReplyDelete
  16. Using Gb Instagram Pro APK to grow your business or personal brand is a powerful and also cost-effective way to generate buzz, credibility, and revenue. GB insta Pro APK is the most popular social platform, with over one billion users globally. For more details click on the link: https://gbinstahub.com/instapro/

    ReplyDelete
  17. The update brings new customization options, allowing users to personalize their chats and express themselves more creatively. Stay connected like never before with the jt whatsapp 9.95 download update, ensuring seamless communication with friends, family, and colleagues.

    ReplyDelete

Post a Comment

Popular posts from this blog

iOS Architecture

Property vs Instance Variable (iVar) in Objective-c [Small Concept but Great Understanding..]

setNeedsLayout vs layoutIfNeeded Explained