カメラとカメラロールを使って写真をコレクションビューに保存することのできるアプリを作っているのですが、画像を保存する箇所で処理が遅く数秒かかってしまい非常に煩わしいです。

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];
の部分が遅くアプリが数秒固まったようになってしまいます。

メモリは③の処理の部分で最大になります。メモリの使いすぎなのでしょうか...
画像の説明をここに入力

なにか解決する方法はありませんか、どなたかよろしくお願いします。