Skip to content

Instantly share code, notes, and snippets.

View ksm's full-sized avatar
🏔️

Karol S. Mazur ksm

🏔️
View GitHub Profile
@ksm
ksm / gist:3689585
Created September 10, 2012 08:07
NSNumber literals with types
NSNumber *value;
value = @'X'; // char
value = @12345 // int
value = @12345ul // unsigned long
value = @12345ll // long long
value = @123.45f // float
value = @123.45 // double
value = @YES // BOOL
@ksm
ksm / gist:3689574
Created September 10, 2012 08:05
Constant literal container workaround
/*
Source: WWDC2012 Modern Objective-C talk
How to get a constant literal container to work.
*/
@implementation MyClass
static NSArray *thePlanets;
+ (void)initialize {
@ksm
ksm / gist:3689409
Created September 10, 2012 07:24
Enum with Fixed Underlying Type
/*
Enum with Fixed Underlying Type
New with Xcode 4.4
Via WWDC2012 Session 405 - Modern Objective-C
Results in better code completion and stronger type checking.
Use -Wconversion compiler flag to check for enum type errors.
-Wswitch for checking if switch statement is fully handled for enum.
*/
@ksm
ksm / .gitignore
Created May 16, 2012 12:01 — forked from kluivers/.gitignore
.gitignore for Xcode projects
# .gitignore in use by Joris Kluivers
#
# Latest version:
# https://gist.github.com/gists/1923197
*.DS_Store
# Xcode
*.pbxuser
*.mode1v3
@ksm
ksm / gist:2152929
Created March 21, 2012 21:18
KVO granular notifications on NSMutableArray
/*
Thanks to @_bejo
*/
- (void)_insertGlobalRoomMessage:(id)msg atIndex:(NSUInteger)index
{
NSIndexSet *changeSet = [NSIndexSet indexSetWithIndex:index];
[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:changeSet forKey:@"globalRoomMessages"];
[(NSMutableArray *)self.globalRoomMessages insertObject:msg atIndex:index];
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:changeSet forKey:@"globalRoomMessages"];
@ksm
ksm / gist:1869980
Created February 20, 2012 16:23
CALayer masking in drawLayer:inContext (to avoid layer.cornerRadius performance hit)
/*
Source: Apple Developer - Understanding iOS View Compositing
Note: setting view.layer.cornerRadius and .masksToBounds
sends the view for rending to an offscreen buffer.
We want to avoid unnecessary rendering passes.
Let the context do the work.
*/
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGRect rect = layer.bounds;
@ksm
ksm / debug.h
Created February 20, 2012 11:00
Xcode: how to debug the right way
// via @_bejo
// then just add a DEBUG = 1 to debug target in xcode
#ifdef DEBUG
#define DebugLog( s, ... ) NSLog( @"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DebugLog( s, ... )
@ksm
ksm / gist:1830844
Created February 14, 2012 21:55
CoreGraphics UITableView iOS5 bevel effect function
/*
Copied and pasted from Tim Oliver's blog.
Source: http://www.tim-oliver.com/2011/10/23/creating-the-uitableview-bevel-effect-in-coregraphics/
*/
void DrawInsetBeveledRoundedRect(CGContextRef context, CGRect rect, CGFloat radius, UIColor *fillColor) {
//contract the bounds of the rectangle in to account for the stroke
CGRect drawRect = CGRectInset(rect, 1.0f, 1.0f);
//contract the height by 1 to account for the white bevel at the bottom
@ksm
ksm / DrawView.h
Created February 14, 2012 21:59
DrawView with a block for drawRect: an alternative to subclassing UIView for simple drawing operations
/*
Copied and pasted from David Hamrick's blog.
Source: http://www.davidhamrick.com/2011/08/07/using-blocks-for-drawing-to-avoid-subclasssing-in-objective-c.html
*/
typedef void(^DrawView_DrawBlock)(UIView* v,CGContextRef context);
@interface DrawView : UIView
/**
Provides the ability to verify key paths at compile time.
If "keyPath" does not exist, a compile-time error will be generated.
Example:
// Verifies "isFinished" exists on "operation".
NSString *key = SQKeyPath(operation, isFinished);
// Verifies "isFinished" exists on self.