Benedict Cohen

7pods
BCJSONReader is a library for processing the crazy JSON structures that exist in the real world. Its key features are: + Flexible. Provides functionality for handling many JSON usage styles. + Extensible. Easy to integrate own code and still use BCJSONReader intrastructure.
License: MIT
BCLContinuations was a little continuations library for Objective-C. It wasn't a good idea. It's now dead. Don't use it.
License: MIT
BCLKeyValueObservation is a thin abstraction on top of Apple's KVO system. The goals of BCLKeyValueObservation are: - Less boiler plate code (good bye observeValueForKeyPath:ofObject:change:context:) - Improve clarity of functionality (imperiative method names) - Not an excuse to have fun with the runtime
License: MIT
BCLRedirectingURLCache allows requests to be redirected to local or remote files. Potential uses: + Remove dependancies on in-development web services + Testing of network code + Provide static content to web views.
License: MIT
BCOValueObject is an abstract class for implementing value objects. BCOValueObject provides equality checking and uniquing and optionally support for mutable variants.
BCOValueObject places the following restrictions on its subclasses: - Direct subclasses can only include readonly properties. These properties should only be set by the designated initializer. Direct subclasses are referred to as 'immutable variants'. - Immutable variants are thread safe. - Immutable variants may be subclassed to create 'mutable variants'. Mutable variants have the following restrictions: - Mutable variants must not add properties (direct ivars can be added but this is strongly discouraged). - Mutable variants should not be subclassed. - Setter declarations for mutable variants must be listed in a category. Implementations for setters will be automatically generated for most types. If a setter cannot be generated then an exception will be raised when the class is initialized. Setters which cannot be generated must be implemented like so: -(void)setTransform:(CATransform3D)transform { [self setValue:[NSValue valueWithCATransform3D:transform] forKey:@"transform"]; } BCOValueObject overrides setValue:forKey: so that it will not cause an infinite loop when being called from within a setter providing that the class hierarchy requirements listed above are adhered to. - Mutable variants must be registered so that immutable variant can make mutable copies. The simplest way to do this is to call BCOVALUEOBJECTREGISTERMUTABLE_VARIANT from within the header file where the mutable variant is declared.
Due to the subclassing restrictions protocols should be used to implement polymorphism.
License: MIT
JSONReader provides type checked access to a JSON object using JSON paths. JSONReader reduces the amount of boiler plate code required to safely handle JSON and makes it easy to handle errors.
License: MIT