iPhone 5: -568h > ~iphone > @2x > .
-568h@2x~iphone
-568h~iphone
-568h@2x
-568h
@2x~iphone
~iphone
@2x
.
| #import <Foundation/Foundation.h> | |
| typedef void(^KVObservingBlock)(id value, NSDictionary *change); | |
| @interface KVObserver : NSObject | |
| - (instancetype)initWithBlock:(KVObservingBlock)block; | |
| @end |
| - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { | |
| NSUInteger section = ... | |
| CGRect rect = [self.tableView rectForSection:section]; | |
| // Include content inset | |
| rect.origin.y -= self.tableView.contentInset.top; | |
| // Restore previous offset and animate to destination | |
| CGPoint offset = self.tableView.contentOffset; |
| - (NSMutableData *)mutableRGBAData { | |
| CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | |
| CGSize scaledSize = (CGSize){ | |
| .width = self.size.width * self.scale, | |
| .height = self.size.height * self.scale, | |
| }; | |
| NSUInteger const bytesPerPixel = 4; | |
| NSUInteger const bitsPerComponent = 8; |
| // The Unlicense (https://unlicense.org) | |
| - (NSString *)guessName { | |
| unsigned char redComponent = roundf(self.redComponent*4); | |
| unsigned char greenComponent = roundf(self.greenComponent*4); | |
| unsigned char blueComponent = roundf(self.blueComponent*4); | |
| // Component methods implemented below. | |
| static NSString * const black = @"black"; | |
| static NSString * const red = @"red"; |
| #if !defined(NS_BLOCK_ASSERTIONS) | |
| #define MTKAssert(CONDITION, MESSAGE, ...)\ | |
| if ( ! (CONDITION) && (( [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] file:[NSString stringWithUTF8String:__FILE__] lineNumber:__LINE__ description:MESSAGE, ##__VA_ARGS__], YES)) ) | |
| #else | |
| #define MTKAssert(CONDITION, MESSAGE, ...)\ | |
| if ( ! (CONDITION) && (( NSLog(@"*** Assertion failure in %s, %s:%d, Condition not satisfied: %s, reason: '" MESSAGE "'", __PRETTY_FUNCTION__, __FILE__, __LINE__, #CONDITION, ##__VA_ARGS__), YES)) ) |
| CGFloat CGFloatAdjustToScreenScale(CGFloat value, NSRoundingMode mode) { | |
| CGFloat (*roundingFunction)(CGFloat); | |
| switch (mode) { | |
| case NSRoundPlain: roundingFunction = &roundf; break; | |
| case NSRoundUp: roundingFunction = &ceilf; break; | |
| case NSRoundDown: roundingFunction = &floorf; break; | |
| case NSRoundBankers:roundingFunction = &roundf; break; | |
| } | |
| CGFloat scale = [[UIScreen mainScreen] scale]; | |
| CGFloat result = roundingFunction(value * scale) / scale; |
| - (NSString *)stringByDeletingHTML { | |
| // Delete HTMl tags. | |
| /// http://stackoverflow.com/questions/277055/remove-html-tags-from-an-nsstring-on-the-iphone | |
| NSRange range; | |
| NSMutableString *string = [self mutableCopy]; | |
| while ((range = [string rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) | |
| [string deleteCharactersInRange:range]; | |
| // Replace escaped sequences. | |
| NSDictionary *escapes = @{ |
| 2013-03-22 21:26:36.231 TeeVee[86457:c07] *** -[__NSCFCalendar components:fromDate:]: date cannot be nil | |
| I mean really, what do you think that operation is supposed to mean with a nil date? | |
| An exception has been avoided for now. | |
| A few of these errors are going to be reported with this complaint, then further violations will simply silently do whatever random thing results from the nil. | |
| Here is the backtrace where this occurred this time (some frames may be missing due to compiler optimizations): | |
| ( | |
| 0 CoreFoundation 0x0283da75 -[__NSCFCalendar components:fromDate:] + 85 | |
| 1 TeeVee 0x00037e0e -[TVUpcomingEpisodeViewController viewDidLoad] + 3886 | |
| ... |
| // How do you implement lazy loading getters? | |
| - (NSString *)title { | |
| if ( ! self->_title) { | |
| NSString *string = @"lazy loaded"; | |
| // Do some real stuff here... | |
| self->_title = string; | |
| } | |
| return self->_title; | |
| } |
iPhone 5: -568h > ~iphone > @2x > .
-568h@2x~iphone
-568h~iphone
-568h@2x
-568h
@2x~iphone
~iphone
@2x
.