Skip to content

Instantly share code, notes, and snippets.


Olivier Halligon AliSoftware

View GitHub Profile
AliSoftware / async_test_crash_demo.m
Last active Dec 25, 2015
Demo of code executing even after a unit test has finished
View async_test_crash_demo.m
- (void)setUp
[super setUp];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
- (void)tearDown
[MagicalRecord cleanUp]; // cleans up the CoreData stack to be ready for a clean state for the next tests
// Note: any code after this line that would try to use CoreData will obviously fail
AliSoftware / oncetoken_reset_thread_risk.m
Last active Dec 25, 2015
Demo of a case where resetting onceToken can be non-thread-safe and dangerous
View oncetoken_reset_thread_risk.m
dispatch_once_t onceToken;
SomeClass* _sharedInstance;
+ (id)sharedInstance
dispatch_once(&onceToken, ^{ _sharedInstance = [SomeClass new]; });
return _sharedInstance;
- (void)tearDown
AliSoftware / 1-NoDependencyInjection.m
Last active Dec 28, 2015
Dependency injection concepts
View 1-NoDependencyInjection.m
// No dependency injection at all.
// Instead of having independant modules, we have a strong dependency between the Controller, the ContactService and the View
@interface Contact : NSObject
@property NSString* name;
@interface ContactService : NSObject
- (void)fetchAllContactsWithCompletion:(void(^)(NSArray* contacts))completion;
View VariableCellSize.m
@interface MyCell : UITableViewCell
#import "UIView+NFCore.h" // "instantiateFromNib:"
@implementation MyCell
AliSoftware / struct_vs_inheritance.swift
Last active Apr 7, 2021
Swift, Struct & Inheritance: How to balance the will of using Struct & Value Types and the need for Inheritance?
View struct_vs_inheritance.swift
// #!Swift-1.1
import Foundation
// MARK: - (1) classes
// Solution 1:
// - Use classes instead of struct
// Issue: Violate the concept of moving model to the value layer
View Promises.swift
// For implementing the Promises pattern, I suggest
// But here we will build a very simple, naive and limited implementation just to show very basic concepts
import Foundation
// Promise Pattern (very simplified and naive)
class Promise<T> {
View Protocol-Extensions.swift
# Swift 2.0
protocol AbstractAnimal : CustomStringConvertible {
// Abstract, to implement
var firstName: String { get set }
var lastName: String { get set }
// var fullName: String { get } // don't declare it this time!
View Generics-Macros.h
// Allow to use generics even if not supported yet
#if __has_feature(objc_generics)
#define NSArrayOf(x) NSArray<x>
#define NSMutableArrayOf(x) NSMutableArray<x>
#define NSDictionaryOf(x,y) NSDictionary<x, y>
#define NSMutableDictionaryOf(x, y) NSMutableDictionary<x, y>
#define NSSetOf(x) NSSet<x>
#define NSMutableSetOf(x) NSMutableSet<x>
#define NSArrayOf(x) NSArray
View L10n.swift
//: Playground - noun: a place where people can play
import Foundation
// This is a fake implementation mimicking the behavior of having a Localizable.string
// This is used here to be able to test the code easily in a Playground
func localize(key: String) -> String {
return [
"alert.title": "Titre d'Alerte",
"alert.message": "Message d'Alerte",
View using.swift
func using<T: AnyObject>(object: T, execute: (T) throws -> Void) rethrows -> T {
try execute(object)
return object
import UIKit
// Then in some configureView() function of an UIViewController or whatnot…
let label1 = using(UILabel()) {