Сценарий, ради DRY я создал контроллер представления (например, GeneralDelegateForEmailAndSMS), реализующий методы протокола MFMailComposeViewControllerDelegate.
// GeneralDelegateForEmailAndSMS.h
#import <MessageUI/MessageUI.h>
@interface GeneralDelegateForEmailAndSMS : UIViewController <MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate>
@end
// GeneralDelegateForEmailAndSMS.m
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{ ... }
Затем внутри метода класса (например, composeDiscountInfo) класса, отвечающего за рассылку (например, MyMailer)
+(void) composeDiscountInfo:(ResInfoData *)resturantInfo{
// XmsMFMailComposeViewController, a subclass of MFMailComposeViewController in order to overwrite the default auto rotation.
XmsMFMailComposeViewController *picker = [[XmsMFMailComposeViewController alloc] init];
// Q: method returneds an Object with a +1 retain count.
picker.mailComposeDelegate = [[GeneralDelegateForEmailAndSMS alloc] init];
// Q: object leaked, allocated object is not referenced later in the execution path and has a retain count of +1 A:
[picker setSubject:@"title"];
// ... message body construction... and present via AppDelegate.navController
}
Мой вопрос: какустранить потенциальную утечку памяти (упомянуто выше в комментариях к коду)?Я не могу установить автоматическое освобождение делегата, так как похоже, что он будет собирать мусор и вылетать из приложения.Кроме того, MyMailer должен включать в себя только метод класса, нет методов жизненного цикла для обработки объекта.Какое решение?
Я очень мало знаю об инструкциях профиля, есть ли какие-либо подсказки о том, как использовать их для обнаружения утечек?
Обновлено:
Предполагается, что MyMailer будет классом «только методы класса», во многих контроллерах представления, которые должны составлять / отправлять электронную почту / SMS в приложении, я могу просто написать код типа «[MyMailer composeMailWith: data]» с кодом реализации, указанным ниже (т.е.composeDiscountInfo: данные во втором фрагменте кода).
Внутри этих методов класса я желаю Я могу установить свойство делегата MFMailCompseViewController (mailComposeDelegate) для отдельного класса, который реализует MFMailComposeViewControllerDelegate.
Может быть, я сделаю Mailer одиночным,вызов будет выглядеть как «[экземпляр MyMailer] composeThatMailWith: data» во многих VC.Я попробую завтра!