Obfuscated Objc - oder - wie macht man Konstanten?

written by Martin Häcker on

Ist ja eigentlich nicht schwer, man braucht lediglich eine Definition wie diese

#define kIOHIDVendorIDKey @"VendorID"
const NSString *windowName = @"Morgens"

Einziges Problem - immer wieder hat man vom System konstante C-Strings, die man aber als Objc-Strings benötigt.

Interessanterweise hat der Compiler überhaupt kein Problem das hier zu machen:

#define kIOHIDVendorIDKey "VendorID"
// ...
[matchingDict setValue:[NSNumber numberWithInt:entry->Vendor_ID] 
       forKey: @kIOHIDVendorIDKey]; 

// same, but more readable than
[matchingDict setValue:[NSNumber numberWithInt:entry->Vendor_ID] 
       forKey: [NSString stringWithCString:kIOHIDVendorIDKey]];
// Also note that -stringWithCString is deprecated

Oder mit anderen Worten man kann problemlos aus jeder C-String-Konstante eine Objc-String-Konstante machen, indem man einfach ein @ davor schreibt.

Neat.