I’m using MFMailComposeViewController to send email.
But it crashed when sending large attachments, because of low-memory.
Does ‘Mail’ allocate memory for attachments?
And how should I do to
>
Dec 3 11:57:36 unknown kernel[0] <Debug>: launchd[1507] Builtin profile: container (sandbox)
Dec 3 11:57:36 unknown kernel[0] <Debug>: launchd[1507] Container: /private/var/mobile/Applications/776D8BB7-805E-46B1-B208-DF2CFE46AB3A [69] (sandbox)
> >
Dec 3 11:57:48 unknown MobileMail[1483] <Warning>: Received memory warning.
Dec 3 11:57:49 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilemail[0x26be]) Exited: Killed: 9
Dec 3 11:57:49 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.yourcompany.TestApp[0xc7ed]) Exited: Killed: 9
Dec 3 11:57:49 unknown UserEventAgent[12] <Notice>: jetsam: kernel termination snapshot being created
Dec 3 11:57:49 unknown SpringBoard[1186] <Warning>: Application 'TestApp' exited abnormally with signal 9: Killed: 9
>
Dec 3 11:57:50 unknown SpringBoard[1186] <Warning>: Application 'Mail' exited abnormally with signal 9: Killed: 9
Dec 3 11:57:50 unknown SpringBoard[1186] <Warning>: Received memory warning.
Dec 3 11:57:50 unknown ReportCrash[1509] <Error>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2012-12-03-115750.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0
Dec 3 11:57:50 unknown kernel[0] <Debug>: launchd[1510] Builtin profile: MobileMail (sandbox)
If your attachment data is the contents of a file on disk, the best you can do as the caller is create an NSData object from a mapped file:
This transparently keeps the file on disk until parts of it are accessed, and allows the system to be as efficient as it can be.
But beyond that, if you run out of memory on the device, the attachment is too big. It’s also fairly likely that the if the device runs out of memory trying to attach an email, the email service probably wouldn’t accept the email message anyways it would be so large.