FTP Client for OSX!

I recently had to play with several FTP servers… and truth to be told, working command line can turn into a pain in the neck. You might miss a filename, or maybe you need to type really, relaly long paths. That’s why i began looking for a decent FTP client for OSX.

Well, it turns out, these guys wrote a pretty decent FTP client. And guess what! they offer it for free!.

OSX FTP Client

If you like it, please, hit the donate button. It’s in the AppStore, too, but it’s offered for over 20 dollars, yet, for some unknown reason, you can get it for free straight from the developer’s website.

The good thing about Cyberduck is that it has support for Amazon S3, Google Docs, and almost anything you could possibly need.

I’m sure there are other pretty good FTP clients for OSX. But i think this one deserves our attention.

Preventing crashes: JSON Parsers & Null entries!

How many times you got to parse a backend response, and tested if a given value is != nil?. Well, as it turns out, many parsers (such as JSONKit) will parse ‘null’ values into an instance of NSNull. That might cause a crash… unless you write eeeverywhere… ‘!= nil && != [NSNull null]’.

So… a good idea would be to implement an NSDictionary extention, to do that. Right?.
The method would look like this:
[cc lang=”objc”]
– (id)objectForKeyNotNull:(id)key 
{
    id object = [self objectForKey:key];
    if (object == [NSNull null])
    {
        return nil;
    }
    else
    {
        return object;
    }
}[/cc]

Filtering arrays with NSPredicate!

Suppose you wanna filter a collection of objects. Normally, you’d write a while loop, implement a comparison, and add the matching objects to a collection.

Well, there is an easier way!!. For the sake of this example, say you wanna filter the objects that have the BOOL ‘isEnabled set to YES. So, you could do the following:

[cc lang=”objc”]
NSPredicate* predicate = [NSPredicate predicateWithFormat:@”isEnabled == YES”]; NSArray *filteredArray = [myArray filteredArrayUsingPredicate:predicate];
[/cc]

Yet another powerful example of NSPredicate would be… remember ‘SELECT* WHERE FIELD IN(1, 2)’ ?. Guess what!

[cc lang=”objc”]
NSPredicate* filterPredicate = [NSPredicate predicateWithFormat:@”field IN %@”, desiredFieldValues];
NSArray* filteredObjects = [allObjects filteredArrayUsingPredicate:filterPredicate];
[/cc]

Memory Management Tips!

It’s REALLY recommended that you set to nil any pointer that has a reference to a released object. But it’s tedious, right?. [pointer release]; pointer = nil;.

Why don’t we use a macro instead??
[cc lang=”objc”]
#define LAWipe(x)         [x release]; x = nil;
[/cc]

Simple. Nice. This should help you lower down the BAD_ACCESS crashes!.

 

iOS Singletons

ios3

Suppose that… for whatever reason, you need to target iOS 3.x. Yes. You need to build an app that should run on any possible device. Or say that… you simply don’t wanna use GCD.

What’s the alternative to write a singleton?
[cc lang=”objc”]
+ (id)sharedInstance
{
if(_instance = nil)
{
@synchronized(self)
{
if(_instance == nil)
{
_instance = [[[self class] alloc] init];
}
}
}
return _instance;
}[/cc]
This is a nice alternative to the GCD option. The first time the instance is created, you’ll suffer the lag caused by the @synchronized block. But after that. it’s just an if. No context switch. No whatsoever! REALLY performant!