<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tom Dalling &#187; Cocoa</title>
	<atom:link href="http://www.tomdalling.com/category/cocoa/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tomdalling.com</link>
	<description>Thoughts of a software developer</description>
	<lastBuildDate>Mon, 19 Jul 2010 04:32:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Why performSelector: Is More Dangerous Than I Thought</title>
		<link>http://www.tomdalling.com/cocoa/why-performselector-is-more-dangerous-than-i-thought</link>
		<comments>http://www.tomdalling.com/cocoa/why-performselector-is-more-dangerous-than-i-thought#comments</comments>
		<pubDate>Fri, 14 May 2010 07:22:05 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://www.tomdalling.com/?p=425</guid>
		<description><![CDATA[I fixed a rather nasty bug today in AspectObjectiveC. One particular unit test would crash with EXC_BAD_ACCESS every time. After learning far more about registers and ABIs than I ever wanted to know (thanks, Greg Parker), it dawned on me that performSelector: was corrupting memory. It was particularly hard to track down because the crash [...]]]></description>
		<wfw:commentRss>http://www.tomdalling.com/cocoa/why-performselector-is-more-dangerous-than-i-thought/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video: AspectObjectiveC In Five Minutes</title>
		<link>http://www.tomdalling.com/cocoa/video-aspectobjectivec-in-five-minutes</link>
		<comments>http://www.tomdalling.com/cocoa/video-aspectobjectivec-in-five-minutes#comments</comments>
		<pubDate>Sat, 20 Mar 2010 16:17:26 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://www.tomdalling.com/?p=392</guid>
		<description><![CDATA[Here&#8217;s a quick video about AspectObjectiveC, and what it can do. The code is available from github. I should also mention that AspectObjectiveC isn&#8217;t ready for release just yet.]]></description>
		<wfw:commentRss>http://www.tomdalling.com/cocoa/video-aspectobjectivec-in-five-minutes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Side Project: AspectObjectiveC</title>
		<link>http://www.tomdalling.com/cocoa/side-project-aspectobjectivec</link>
		<comments>http://www.tomdalling.com/cocoa/side-project-aspectobjectivec#comments</comments>
		<pubDate>Thu, 11 Mar 2010 15:49:39 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://www.tomdalling.com/?p=388</guid>
		<description><![CDATA[I&#8217;ve started a new side project called AspectObjectiveC on github. It&#8217;s a little aspect-oriented programming framework for objective-c. In a nutshell, it allows you to run arbitrary code before, after, or instead of any method at runtime. You can modify arguments before they enter the method, modify the return value of the method, or completely [...]]]></description>
		<wfw:commentRss>http://www.tomdalling.com/cocoa/side-project-aspectobjectivec/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MD5 Hashes in Cocoa</title>
		<link>http://www.tomdalling.com/cocoa/md5-hashes-in-cocoa</link>
		<comments>http://www.tomdalling.com/cocoa/md5-hashes-in-cocoa#comments</comments>
		<pubDate>Thu, 24 Sep 2009 03:12:25 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.tomdalling.com/?p=175</guid>
		<description><![CDATA[Let&#8217;s jump straight into the code: #import &#60;CommonCrypto/CommonDigest.h&#62; &#160; NSString* MD5StringOfString&#40;NSString* inputStr&#41; &#123; NSData* inputData = &#91;inputStr dataUsingEncoding:NSUTF8StringEncoding&#93;; unsigned char outputData&#91;CC_MD5_DIGEST_LENGTH&#93;; CC_MD5&#40;&#91;inputData bytes&#93;, &#91;inputData length&#93;, outputData&#41;; &#160; NSMutableString* hashStr = &#91;NSMutableString string&#93;; int i = 0; for &#40;i = 0; i &#60; CC_MD5_DIGEST_LENGTH; ++i&#41; &#91;hashStr appendFormat:@&#34;%02x&#34;, outputData&#91;i&#93;&#93;; &#160; return hashStr; &#125; Now for the explanation. [...]]]></description>
		<wfw:commentRss>http://www.tomdalling.com/cocoa/md5-hashes-in-cocoa/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Implementing Your Own Cocoa Bindings</title>
		<link>http://www.tomdalling.com/cocoa/implementing-your-own-cocoa-bindings</link>
		<comments>http://www.tomdalling.com/cocoa/implementing-your-own-cocoa-bindings#comments</comments>
		<pubDate>Fri, 31 Jul 2009 03:19:36 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://www.tomdalling.com/?p=119</guid>
		<description><![CDATA[This post is the result of investigation into a stackoverflow.com question of mine. So, you&#8217;ve created a spiffy NSView of your own, and have decided to make it compatible with bindings. Great! So you go and read the documentation, and you look at mmalc&#8217;s GraphicsBindings example. You override bind:toObject:withKeyPath:options: and everything works. But wait! Why [...]]]></description>
		<wfw:commentRss>http://www.tomdalling.com/cocoa/implementing-your-own-cocoa-bindings/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
