Skip to content

Instantly share code, notes, and snippets.

View Adlai-Holler's full-sized avatar

Adlai Holler Adlai-Holler

  • Chattanooga, TN
View GitHub Profile
/** Public, and safe since UIKit is single-threaded */
+(instancetype)controllerWithParam:(id)param0 {
nextParam0 = param0;
id vc = [[UIStoryboard storyboard…] instantiateViewController…];
return vc;
}
static id nextParam0;
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(!self) return nil;
@implementation UINavigationController(Trim)
-(void)trimNavigationStack {
NSArray *vcs = [self.viewControllers subArrayWithRange:NSMakeRange(0,self.viewControllers.count - 1)];
NSString *file = [NSTemporaryDirectory() stringByAppendingPathComponent:@"trimmedVCs"];
[NSKeyedArchiver archiveRootObject:vcs toFile:file];
[self setViewControllers:@[self.viewControllers.lastObject] animated:NO];
}
-(void)untrimNavigationStack {
@Adlai-Holler
Adlai-Holler / gist:ae321c3398d7db9a55c0
Created May 4, 2014 21:22
An early pod spec for ReactiveCocoa 3.0-dev
Pod::Spec.new do |s|
s.name = "ReactiveCocoa"
s.version = "3.0-dev"
s.summary = "A framework for composing and transforming streams of values."
s.homepage = "https://github.com/blog/1107-reactivecocoa-is-now-open-source"
s.author = { "Josh Abernathy" => "josh@github.com" }
s.source = { :git => "https://github.com/ReactiveCocoa/ReactiveCocoa.git", :branch => "3.0-development" }
s.license = 'MIT'
s.description = "ReactiveCocoa (RAC) is an Objective-C framework for Functional Reactive Programming. It provides APIs for composing and transforming streams of values."
@Adlai-Holler
Adlai-Holler / UpdateCollectionViewOperation.swift
Created September 26, 2015 20:58
An operation to update an ASTableView/ASCollectionView from an NSFetchedResultsController changeset
/**
Abstract: An operation the apply an FRC update to a table view/collection view.
*/
import UIKit
struct CollectionUpdate {
// Note: These properties are listed in the order changes should be processed
#define kDebugMomentCount 10
-(void)doDebugStuff {
[[TRSyncManager sharedSyncManager] suspendWithKey:@"DebugSuspension"];
Trip *trip = [Trip findFirst]; // Get one somehow. withID is another good candidate
if(!trip) return;
double delayInSeconds = 1.0; // Wait for some assets to get tracked.
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSArray *assetURLs = [[[TRAssetsLibraryTracker shared] sortedAssets] subarrayWithRange:NSMakeRange(0, kDebugMomentCount)];
//
// LockingTests.swift
// LockingTests
//
// Created by Adlai Holler on 1/18/16.
// Copyright © 2016 Adlai Holler. All rights reserved.
//
/**
Results in iOS 9.2 simulator (iPhone 6) on my iMac:
'-[LockingTests.LockingTests testDispatchSemaphore]' measured [Time, seconds] average: 1.012, relative standard deviation: 6.997%, values: [1.090330, 1.071983, 1.048037, 0.911319, 1.042073, 0.920707, 1.079228, 0.962281, 0.919077, 1.076169], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
@Adlai-Holler
Adlai-Holler / ASXCTExtensions.h
Last active August 27, 2016 23:40
XCTest extensions for CGGeometry
/**
* XCTest extensions for CGGeometry.
*
* Prefer these to XCTAssert(CGRectEqualToRect(...)) because you get output
* that tells you what went wrong.
* Could use NSValue, but using strings makes the description messages shorter.
*/
#import <XCTest/XCTestAssertionsImpl.h>
@Adlai-Holler
Adlai-Holler / NSCacheTest.m
Created November 17, 2016 08:07
A test to ensure that NSCache doesn't give up after multiple memory warnings.
- (void)testThatNSCacheDoesntGiveUp
{
NSCache *cache = [[NSCache alloc] init];
for (NSInteger i = 0; i < 5; i++) {
// Add a couple entries for good measure
[cache setObject:(id)kCFNull forKey:[NSUUID UUID]];
[cache setObject:(id)kCFNull forKey:[NSUUID UUID]];
[self expectationForNotification:UIApplicationDidReceiveMemoryWarningNotification object:nil handler:nil];
NSLog(@"Awaiting memory warning…");
@Adlai-Holler
Adlai-Holler / ObjcAtomicImplementations.md
Last active April 19, 2017 21:24
An analysis of the implementations of Objective-C atomic properties.

Objective-C Synthesized Atomic Properties

Summary at bottom.

// iOS, Xcode 8.3.2 stock, ARM, release build

// BOOL

char -[MYObject boolProp](void * self, void * _cmd) {
    r0 = sign_extend_32(self->_boolProp);
@Adlai-Holler
Adlai-Holler / PINForEach.h
Last active April 23, 2017 18:39
Fast enumeration with index in Objective-C
/**
* Performs fast enumeration and keeps track of the enumeration index for you.
* If you don't need the index, you can use for-in directly, or pass `_` for the index name.
* Fast enumeration is _much_ faster than block enumeration, mostly due to the removal
* of many calls to -retain/-release. The only case where block enumeration is justified
* is in NSDictionary (if you need both key&value) and NSIndexSet.
*
* Example:
* PINForEach(NSString *str, self.titles, row, ({
* NSLog(@"Title %zd: %@", row, str);