Created
March 26, 2010 15:15
-
-
Save jorbsd/345001 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<p>Samples of new usage for <a href="http://github.com/jordanbreeding/JBBAdditions">continuations in JBBAdditions</a>.</p> | |
<p>The relevant source files are:</p> | |
<ul> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/JBBTypes.h">JBBTypes.h</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/JBB_C_Functions.h">JBB_C_Functions.h</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/JBB_C_Functions.h">JBB_C_Functions.m</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/Classes/JBBObjectProxy.h">Classes/JBBObjectProxy.h</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/Classes/JBBObjectProxy.h">Classes/JBBObjectProxy.h</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/Classes/Extensions/NSInvocation+JBBAdditions.h">Classes/Extensions/NSInvocation+JBBAdditions.h</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/Classes/Extensions/NSInvocation+JBBAdditions.m">Classes/Extensions/NSInvocation+JBBAdditions.m</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/Classes/Extensions/NSObject+JBBAdditions.h">Classes/Extensions/NSObject+JBBAdditions.h</a></li> | |
<li><a href="http://github.com/jordanbreeding/JBBAdditions/blob/master/Classes/Extensions/NSObject+JBBAdditions.m">Classes/Extensions/NSObject+JBBAdditions.m</a></li> | |
</ul> | |
<p>The new code samples are:</p> | |
<ol> | |
<li><p>Create an empty proxy, message it directly, it should pass things through (returns value)</p> | |
<pre><code>//clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBAdditions/Release -F/Users/jordan/Build/JBBAdditions/Release -o test_1 test_1.m -framework JBBAdditions -framework Cocoa | |
#import <Cocoa/Cocoa.h> | |
#import <JBBAdditions/JBBAdditions.h> | |
int main(int argc, char *argv[]) { | |
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; | |
<pre><code>NSError *anError = nil; | |
NSString *aString = nil; | |
NSString *anotherString = nil; | |
aString = [NSString stringWithCString:"this is a test" encoding:NSUTF8StringEncoding]; | |
[aString jbb_puts]; | |
anotherString = [NSString stringWithCString:"this is another test" encoding:NSUTF8StringEncoding]; | |
[anotherString jbb_puts]; | |
if (![NSString stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:&amp;anError]) { | |
if (anError) { | |
[[NSString stringWithFormat:@"an error occured: %@", anError] jbb_puts]; | |
} else { | |
[@"an error occurred" jbb_puts]; | |
} | |
} else { | |
[@"no error occurred" jbb_puts]; | |
} | |
[localPool drain]; | |
return 0; | |
</code></pre> | |
} | |
</code></pre></li> | |
<li><p>Create an empty proxy, message it directly, use +getStoredInvocation and then invoke it, there is a WRAP_MSG_SEND() macro to help</p> | |
<pre><code>// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBAdditions/Release -F/Users/jordan/Build/JBBAdditions/Release -o test_2 test_2.m -framework JBBAdditions -framework Cocoa | |
#import <Cocoa/Cocoa.h> | |
#import <JBBAdditions/JBBAdditions.h> | |
int main(int argc, char *argv[]) { | |
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; | |
<pre><code>[WRAP_MSG_SEND(NSString, stringWithCString:"this is a test" encoding:NSUTF8StringEncoding) jbb_invokeWithContinuation:^(id anObject) { | |
[anObject jbb_puts]; | |
}]; | |
__block NSString *anOutsideObject = nil; | |
[WRAP_MSG_SEND(NSString, stringWithCString:"this is another test" encoding:NSUTF8StringEncoding) jbb_invokeWithContinuation:^(id anObject) { | |
anOutsideObject = [anObject retain]; | |
}]; | |
[[anOutsideObject autorelease] jbb_puts]; | |
[WRAP_MSG_SEND(NSString, stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil) jbb_invokeWithContinuation:^(id anObject) { | |
[@"no error occurred" jbb_puts]; | |
} errorHandler:^(NSError *anError) { | |
if (anError) { | |
[[NSString stringWithFormat:@"an error occured: %@", anError] jbb_puts]; | |
} else { | |
[@"an error occurred" jbb_puts]; | |
} | |
}]; | |
[localPool drain]; | |
return 0; | |
</code></pre> | |
} | |
</code></pre></li> | |
<li><p>Create an empty proxy, message it with continuations and error handlers attached (returns object)</p> | |
<pre><code>// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBAdditions/Release -F/Users/jordan/Build/JBBAdditions/Release -o test_3 test_3.m -framework JBBAdditions -framework Cocoa | |
#import <Cocoa/Cocoa.h> | |
#import <JBBAdditions/JBBAdditions.h> | |
int main(int argc, char *argv[]) { | |
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; | |
<pre><code>[[NSString jbb_proxy] stringWithCString:"this is a test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { | |
[anObject jbb_puts]; | |
}]; | |
__block NSString *anOutsideObject = nil; | |
[[NSString jbb_proxy] stringWithCString:"this is another test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { | |
anOutsideObject = [anObject retain]; | |
}]; | |
[[anOutsideObject autorelease] jbb_puts]; | |
[[NSString jbb_proxy] stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil continuation:^(id anObject) { | |
[@"no error occurred" jbb_puts]; | |
} errorHandler:^(NSError *anError) { | |
if (anError) { | |
[[NSString stringWithFormat:@"an error occured: %@", anError] jbb_puts]; | |
} else { | |
[@"an error occurred" jbb_puts]; | |
} | |
}]; | |
[localPool drain]; | |
return 0; | |
</code></pre> | |
} | |
</code></pre></li> | |
<li><p>Create a proxy with an associated continuation and error handler, message it directly (returns value)</p> | |
<pre><code>// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBAdditions/Release -F/Users/jordan/Build/JBBAdditions/Release -o test_4 test_4.m -framework JBBAdditions -framework Cocoa | |
#import <Cocoa/Cocoa.h> | |
#import <JBBAdditions/JBBAdditions.h> | |
int main(int argc, char *argv[]) { | |
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; | |
<pre><code>[[NSString jbb_proxyWithContinuation:^(id anObject) { | |
[anObject jbb_puts]; | |
}] stringWithCString:"this is a test" encoding:NSUTF8StringEncoding]; | |
__block NSString *anOutsideObject = nil; | |
[[NSString jbb_proxyWithContinuation:^(id anObject) { | |
anOutsideObject = [anObject retain]; | |
}] stringWithCString:"this is another test" encoding:NSUTF8StringEncoding]; | |
[[anOutsideObject autorelease] jbb_puts]; | |
[[NSString jbb_proxyWithContinuation:^(id anObject) { | |
[@"no error occurred" jbb_puts]; | |
} errorHandler:^(NSError *anError) { | |
if (anError) { | |
[[NSString stringWithFormat:@"an error occured: %@", anError] jbb_puts]; | |
} else { | |
[@"an error occurred" jbb_puts]; | |
} | |
}] stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil]; | |
[localPool drain]; | |
return 0; | |
</code></pre> | |
} | |
</code></pre></li> | |
<li><p>Create a proxy with an associated continuation and error handler, message it with continuations and error handlers attached (returns object)</p> | |
<pre><code>// clang -arch i386 -arch x86_64 -Wl,-rpath,/Users/jordan/Build/JBBAdditions/Release -F/Users/jordan/Build/JBBAdditions/Release -o test_5 test_5.m -framework JBBAdditions -framework Cocoa | |
#import <Cocoa/Cocoa.h> | |
#import <JBBAdditions/JBBAdditions.h> | |
int main(int argc, char *argv[]) { | |
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; | |
<pre><code>id baseProxy = [NSString jbb_proxyWithContinuation:^(id anObject) { | |
[@"base continuation" jbb_puts]; | |
} errorHandler:^(NSError *anError) { | |
[@"base errorHandler" jbb_puts]; | |
}]; | |
[baseProxy stringWithCString:"this is a test" encoding:NSUTF8StringEncoding]; | |
[baseProxy stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil]; | |
[baseProxy stringWithCString:"this is a test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { | |
[anObject jbb_puts]; | |
}]; | |
__block NSString *anOutsideObject = nil; | |
[baseProxy stringWithCString:"this is another test" encoding:NSUTF8StringEncoding continuation:^(id anObject) { | |
anOutsideObject = [anObject retain]; | |
}]; | |
[[anOutsideObject autorelease] jbb_puts]; | |
[baseProxy stringWithContentsOfFile:@"/tmp/completely_fake_file.txt" encoding:NSUTF8StringEncoding error:nil continuation:^(id anObject) { | |
[@"no error occurred" jbb_puts]; | |
} errorHandler:^(NSError *anError) { | |
if (anError) { | |
[[NSString stringWithFormat:@"an error occured: %@", anError] jbb_puts]; | |
} else { | |
[@"an error occurred" jbb_puts]; | |
} | |
}]; | |
[localPool drain]; | |
return 0; | |
</code></pre> | |
} | |
</code></pre></li> | |
</ol> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment