Monday, June 24, 2013

Hidden Gems in Cocoa Touch / XCode

1. Open Quickly (Command-Shift-O)
2. View Related Files From Toolbar
3. Use breakpoint actions such as log message or play a sound to avoid recompiling.
4. Use debugDescription.
5. Use Objective-C Subscripting.
NSMutableArray *indexedValues = [NSMutableArray array];

indexedValues[0] = @"One";

NSLog(@"value: %@", indexedValues[0]);

NSMutableDictionary *keyedValues = [NSMutableDictionary dictionary];

keyedValues[@"color"] = [UIColor blueColor];

NSLog(@"value: %@", keyedValues[@"color"]);

6. Private declarations not necessary since Xcode 4.3
7. Synthesize not necessary for @property since Xcode 4.4
8. Reverse arrays quickly inline

 NSArray *numbers = @[ @1, @2, @3 ];

 NSArray *reversed = numbers.reverseObjectEnumerator.allObjects;

9.  Guarantee a mutable object

 NSArray *unknown = self.values; // may be nil

 NSMutableArray *newArray = [NSMutableArray arrayWithArray:unknown];

10. Declare and enumerate different collection types

 id collection = values;

 for (id object in collection) {

... }

11. Remove duplicate values in array without NSSet

[array valueForKeyPath:@"@distinctUnionOfObjects.self"]

12. CAGradientLayer

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = CGRectMake(150, 250, 500, 500);

UIColor *c1 = [UIColor colorWithRed:0.09 green:0.70 blue:0.98 alpha:1.0];

UIColor *c2 = [UIColor colorWithRed:0.07 green:0.41 blue:0.95 alpha:1.0];

UIColor *c3 = [UIColor colorWithRed:0.81 green:0.46 blue:0.93 alpha:1.0];

gradient.colors = @[(id)c2.CGColor, (id)c3.CGColor, (id)c3.CGColor];

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"colors"];

anim.toValue = @[(id)c1.CGColor, (id)c2.CGColor, (id)c2.CGColor];

anim.duration = 4.0;

anim.autoreverses = YES;

anim.repeatCount = 1e100;

[gradient addAnimation:anim forKey:@"colors"];

[self.view.layer addSublayer:gradient];



13. Core Data Private Queue

NSManagedObjectContext *bgContext;

bgContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:

                                    NSPrivateQueueConcurrencyType];

[context performBlock:^{

    // (add, remove, change objects.)

    saveCompleted = [context save:& saveError];

}];



14. Core Data
Really fast fetches
• Only specific properties

 NSFetchRequest

 fetch.propertiesToFetch = @[@"name", @"phone"];

• Only the raw values

fetch.resultType = NSDictionaryResultType
• Only the object id

 fetch.resultType = NSManagedObjectIDResultType

• Only the count

 fetch.resultType = NSCountResultType



No comments:

Post a Comment