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
@Adlai-Holler
Adlai-Holler / ASCache.m
Created May 19, 2018 19:37
A cache that coalesces operations for the same key. We currently don't do enough concurrent duplicate requests for this to be useful but I think it's neat.
//
// ASCache.m
// Texture
//
// Copyright (c) 2018-present, Pinterest, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
@Adlai-Holler
Adlai-Holler / CATransactionObserving.mm
Last active June 12, 2023 06:23
How to observe CoreAnimation transaction commits as activities. Covers run-loop commits and UIKit-direct-flush commits, but not CADisplayLink scroll view commits.
/**
* Don't use this in production!
*
* Screenshot of it working: https://user-images.githubusercontent.com/2466893/27601666-f65159f0-5b24-11e7-969d-fe86103c21de.png
*/
/**
* This is real, private CA API. Valid as of iOS 10.
*/
typedef enum {
@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);
@Adlai-Holler
Adlai-Holler / AHDeadlockDetector.m
Last active April 23, 2024 08:48
A simple UIKit deadlock detector, written in Objective-C.
#import <Foundation/Foundation.h>
#import <pthread.h>
#import <stdatomic.h>
@interface AHDeadlockDetector ()
/**
* The current detection thread, if one is running. We store this weakly because
* if the thread has exited, why keep it around? In practice however, we nil
@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 / 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 / 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>
//
// 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 / 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
@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."