quartz core generating loads of VM: UILabel(CA Layer) - ios

I have an app which drags messages dynamically from server, as scrolling to top, old messages will be retrieved and display on the screen like other messaging apps, but my app keeps generating UIlabel, even though no more old messages presents after all the old messages are retrieved, the UIlabel will still be generated if the list is being scrolled, and the source is from QuartzCore, responsible caller is CA::Render::Shemem::new_shmem(unsigned long).
Can anyone help me, I'm quite new at developing ios, and im using objective-C, the memory issue cause my app crashed on every version of iphones as the UILabel stacks and seems like it will never release unless I switched to other chatrooms. Thanks for any help!!

It sounds like you are adding labels to a scroll view. Change your app to use a table view or a collection view to display messages. These classes automatically remove and reuse cells that are scrolled off the screen.

Related

ScrollView rendering takes a lot of time on iOS using Appcelerator

One of our Appcelerator apps is experiencing rendering delays on IOS platform for the screens where there are multiple widgets (customised textfields to meet client UI requirement) being displayed inside the scrollview.
The screens are making use of ScrollView where these custom controls (Widgets) are displayed inside the views. We are seeing the delay in the following scenarios:
When the screen is having quite a few controls displayed (around 10-15 controls).
It is observed that the rendering time it takes and any changes to this control properties while the page is loading (such as setting some properties by calling the methods on the widget) is resulting in extra 2-3 secs delay.
When these controls are dynamically added into the page - say in response to the question by the user we display additional controls to capture the information.
We have seen a clear lag in this case which is not good from the user experience perspective.
Note:
All of these issues are only on IOS platform whereas the same code works pretty good (without any lag) on Android platform.
Tried out using the tableview in place of scrollview but the result is no different.
Using tableview also results in poor scrolling performance.
As some complex views are created and added dynamically, using listView would be challenging.
Can anyone let me know if any of you are aware of such issue and how it was resolved (in any appcelerator project)? Is there any way on the native front setting some property/native code through a module that would help speed up the rendering on IOS?
We are only developing for iPads and iPad Minis using iOS 7.1.1+ using Titanium SDK version 5.1.2 (We have tried latest SDKs, but they haven't solved our problem).

iOS - How do apps like Path optimize their table cells where every cell is (almost) different?

So here's the issue i'm currently running into.
I have an app that shows a Facebook/Path like feed with a UITableView. Let's say that my datasource has about 200 items and not all cells have the same content and cell height. Some have images and some don't. I was able to overcome the scrolling performance issue by initializing my cells with a reusable identifier in the following format: [NSString stringWithFormat:"entry_%d", some_id]. Things were going really well up until I started using the UIImagePickerViewController. As you can imagine I've been receiving a lot of memory warnings due to my large datasource/table.
When playing with the Path's app and trying to load as many data into a single view; they do a really good job at both the scrolling performance and memory management. Their app also doesn't crash whenever I go into the camera mode.
Any thoughts or theories?
Thanks! :)
I highly suggest you check out the Facebook iOS framework which reimplements the table view. The name of the framework is Three20, and you can find it on github here.
With that said, if you have a very large table, you need to be careful to only load resources for those things that are in view, and release resources for items once they go out of view. The delegate method tableView:didEndDisplayingCell:forRowAtIndexPath: (available iOS 6 and later) is your friend for that. Here is another question related to this topic.

Vertical Scrolling for iPhone in ActionScript 3

I am working on a project for iPhone (flash builder 4.6), in which I have to implement a custom scroll component.
Basically I have to show the Facebook users in a list render-er, scrolling is working fine initially but when the number of friends increases (more than 300) the scrolling freezes (mainly tapping not working, swipe is still working, I mean to say that MOUSE_MOVE event is not working properly here).
If any one have any idea about it, please share with me.
You need to create (or use an existing) list component that uses a virtual list. i.e. only creates enough cells (or renderers) needed to fill a screen. It then recycles the renderers as you scroll.
Have a look at this:
http://madskool.wordpress.com/2011/06/30/tutorial-3-lists-and-pickers/
Or if you are using stage 3D, http://feathersui.com/examples/components-explorer/

Any potential issues using uitableview and uiwebview to show mini google map

Im looking into having a tableview and a custom cell that has a webview control. The purpose of the webview would to show a google map inside the webview at some lat/long.
Could there be problematic with this approach? Memory issues?
Another approach would be having a uiimage and use the google map static api to generate the image and store the image on my server and have the app request the image via a URL.
I was hoping to avoid generating the images and storing them on my server and using directly the google map in a web view, but not sure what kind of issues i could run into with this approach?
The only problem is speed. If your table view consists of rows and rows of MKMapViews, it will take time for each one to load as the user scrolls through them. However, if there is only one it shouldn't be a problem.
The static image approach has the same problem but I think it might be slightly faster.
I have an app in the App Store for a local festival that had many events at different venues. Given that the audience was from all over the world, and thus unknown in town, the app showed a map for each event. I solved this using an MKMapView inside a custom UITableViewCell and using an accessory disclosure button that would push a detailed map view onto the navigation controller. It worked well, but was a little slow. I would not recommend it for many such cells.
Screen shot:

iPad performance issues

I have this problem with performance of my iPad app..
For developing, I use MonoDevelop, which takes care of Garbage collecting. Still my questions are rather generic, I'd say.
OK, I use TabBarController with 5 NavigationControllers. Inside nav controllers there are some controllers, whose views are TableViews or ScrollViews. Next child is always just regular view.
I have a few questions:
1) TableViews never scroll smoothly. I have some alpha transparency, but since I did my graphics in Photoshop and not programmatically, this transparency should not cause much problems. It doesn't matter whether I have few or many results in table.
On the other hand, I have ScrollView which serves same purpose, i.e. to be a table with different layout and buttons have Photoshop generated transparency as well. It works perfectly.
For tables I applied DequeueReusableCell() which works fine (I see that memory usage is not increasing after scrolling). So why would tables scroll so jerky?
2) My app supports rotation. When I scroll table or scrollView and simultaneously tilt the device a bit, I get maybe 1 or 2 FPS. What is the best way to implement rotation? As I understand, ShouldAutorotateToInterfaceOrientation has to be overridden in all controllers in NavigationController chain. Also, I need to add observer in View I want some changes to happen. Do I have to use BeginGeneratingDeviceOrientationNotifications() in all views or is it enough to do it in Main.cs? Maybe this slows it down?
3) After some time app starts getting memory warnings and then crashes eventually. I tried to read logs and run app with Instruments, but can't find the cause of crash.
4) What exactly happens to a View popped from NavigationController stack? I can't reuse it. But could it be that Monotouch (or me) doesn't dispose it correctly?
I have almost same app for iPhone without support for rotation which never crashes. I think I'm doing something wrong with this rotation, but I'm not sure what.
Any help will be appreciated the most. So, thank you in advance.
Regards
1 - transparencies are always a problem. Even if you're not rendering the images in code, the phone still needs to do the compositing of the image, and that may take a lot of time. UITableViews have to calculate the final composite image every time a new cell is displayed, or the table is scrolled, while UIScrollViews can calculate only once, since the image won't change. So be very careful about it, turn the transparency off, and check if performance improves.
2 - You shouldn't need to notify every uiview in your application. Receive the notification in the controllers that you want to update only, like for example if you want to rearrange items in the UIViewControllers view.
3 - you have one (or many) memory leaks. My guess is that MonoTouch probably can't garbage collect UIViews or UIViewControllers, because they're still being linked from somewhere in UIKit, like a UINavigationController
4 - UIViews are not disposed by UIKit until the app gets a memory warning notification.
Like Eduardo said, alpha transparency in Views comes at a price. There are some tools that you can use to identify the bottlenecks discussed in these WWDC 2011 talks from:
https://developer.apple.com/videos/wwdc/2011/
iOS Performance and Power Optimization with Instruments
Understanding UIKit Rendering
In the "Debug" menu of the iOS simulator you can find various debugging tools that will color different regions of the screen indicating where some problematic rendering is taking place. The WWDC 2011 talks show what you can do to fix those problems.
For your memory problems, it is very likely that you have something pointing out to your objects around, so you need to make sure those objects are gone. While we currently are not shipping our new profiler for MonoTouch that can show the source of the problem, I wrote a "poor man's" debug utility that will help you narrow down which objects are alive. It is available here:
http://tirania.org/tmp/HttpDebug.cs
Call HttpDebug.Start () from your application and as you run, connect with a web browser to http://localhost:5000 to get a list of live Objective-C objects surfaced to C#. The tool is not perfect and shows a lot of irrelevant data, but it would at least give you an idea of what is going on.

Resources