画像保存の際の処理速度が遅い
カメラとカメラロールを使って写真をコレクションビューに保存することのできるアプリを作っているのですが、画像を保存する箇所で処理が遅く数秒かかってしまい非常に煩わしいです。
SubViewController.m
- (void)addSelectedPicture:(SubjectViewController *)controller item: (UIImage *)item
{
//_records(NSMutableArray)
Record *record = _records[_imageSelectionIndexPath.section];
[record.images addObject:item];
//ここが時間かかる$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$①
[[LessonManager sharedManager] saveLessons];
[self.collectionView reloadData];
}
LessonManager.h
#import <Foundation/Foundation.h>
#import "Lesson.h"
@interface LessonManager : NSObject
@property (nonatomic) NSMutableArray *lessons;
+ (instancetype)sharedManager;
- (void)saveLessons;
@end
LessonManager.m
#import "LessonManager.h"
@implementation LessonManager
+ (instancetype)sharedManager {
static LessonManager *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[self alloc] init];
});
NSLog(@"1場所");
return manager;
}
- (instancetype)init
{
self = [super init];
if (self) {
self.lessons = [NSMutableArray arrayWithArray:[Lesson fetchLessons]];
}
NSLog(@"2場所");
return self;
}
- (void)saveLessons
{
NSLog(@"4場所");
//ここが遅い$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$②
[Lesson saveLessons:self.lessons];
NSLog(@"3場所");
}
@end
Lesson.h
#import <Foundation/Foundation.h>
#import "Record.h"
@interface Lesson : NSObject <NSCoding>
@property (nonatomic) NSString *name;
@property (nonatomic) NSString *teacher;
@property (nonatomic) NSString *room;
@property (nonatomic) NSMutableArray *records;
+ (NSArray *)fetchLessons;
+ (void)saveLessons:(NSArray *)lessons;
@end
Lesson.m
#import "Lesson.h"
@implementation Lesson
+ (NSArray *)fetchLessons
{
NSLog(@"8場所");
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [userDefaults dataForKey:@"lessons"];
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if (!array) {
array = [NSArray array];
}
return array;
}
+ (void)saveLessons:(NSArray *)lessons
{
//ここが遅い$$$$$$$$$$$$$$$$$$$$$$$$③
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:lessons];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:data forKey:@"lessons"];
[userDefaults synchronize];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.records = [NSMutableArray array];
}
return self;
}
@end
順番としては①②③と実行されていくと思うのですが、Lesson.mの
+ (void)saveLessons:(NSArray *)lessons{}
の③のうちの
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:lessons];
の部分が遅くアプリが数秒固まったようになってしまいます。
メモリは③の処理の部分で最大になります。メモリの使いすぎなのでしょうか...
なにか解決する方法はありませんか、どなたかよろしくお願いします。