Skip to content

Instantly share code, notes, and snippets.

View Mozilla9's full-sized avatar
💭
I may be slow to respond.

Serge Maslyakov Mozilla9

💭
I may be slow to respond.
View GitHub Profile
@Mozilla9
Mozilla9 / structure_of_ios-product-extension.md
Last active October 24, 2016 22:05
Structure of product-extension iOS project
  • Базовое самостоятельное приложение (продукт)
  • Приложение для vendor-a на основе базового (экстеншен)

Что позволяет:

  • переопределение локализации
  • переопределение графических ресурсов
  • переопределение сторибордов/ксибов/реализаций сервисов-классов

Работа с кодом в продукте:

Проблемы CoreData c многозадачностью:

  • CoreData не thread safe. NSManagedObject's нельзя передавать между потоками. Можно передавать только ObjectId's. Сущности, которые используются в главном потоке, должны загружаться также в главном потоке. Это связано с тем, что у каждой сущности свой контекст в котором она существует + каждый контекст имеет свой тип. Если это NSPrivateQueueConcurrencyType, то у них разные приватные очереди, в которых они работают, и в каком именно бэкграунд потоке будет сохранение мы знать не можем. Если изменяем сущность в одном контексте, то другие контексты не видят этих изменений. Для мержа изменений из одного контекста в другой можно использовать нотификации - каждый контекст кидает эвент когда сохраняет изменения.
  • http://www.slideshare.net/xzolian/core-data-with-multiple-managed-object-contexts
  • [http://floriankugler.com/2013/04/29/concurrent-core-data-stack-performance-shootou
@Mozilla9
Mozilla9 / design_useful_links.md
Last active October 27, 2015 11:10
design_useful_links.md
- (void)saveWebDataInternal:(TaxiSpecialPlacesHierarchyResponseModel *)data completion:(void(^)(NSArray *))completion
{
        NSBlockOperation *op = [[NSBlockOperation alloc] init];

        op.completionBlock = ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                [self loadCachedDataInternal:completion];
            });
 };
- (void)saveWebDataInternal:(id)data completion:(void(^)(id, NSError *))completion
{
    NSBlockOperation *op = [[NSBlockOperation alloc] init];
    __block id result = nil;
    __block NSError *error = nil;

    op.completionBlock = ^{
        dispatch_async(dispatch_get_main_queue(), ^{
 completion(result, error);
@interface AsyncTable()

@property(nonatomic, strong) NSMutableArray* alphaKeys;
@property(nonatomic, assign) NSUInteger isDataLoading;

@end

@implementation AsyncTable    
@interface AsyncTable()

@property(nonatomic, strong) NSMutableArray* alphaKeys;
@property(nonatomic, strong) NSOperationQueue *serialQueue;

@end

@implementation AsyncTable    
@Mozilla9
Mozilla9 / jsonmodel+magicalrecord.md
Last active August 5, 2020 23:22
JSONModel + MagicalRecord

Create CoreData entity from JSONModel object

#import "JSONModel.h"

@interface User : JSONModel

@property(nonatomic, copy) NSString <Optional> *name;
@property(nonatomic, copy) NSString <Optional> *email;
@property(nonatomic, copy) NSString <Optional> *phone;