Created
February 16, 2013 02:27
-
-
Save janodev/4965212 to your computer and use it in GitHub Desktop.
Ways to declare Objective-C variables. See a commented version at http://stackoverflow.com/a/14906215/412916
This file contains hidden or 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
@interface Animal : NSObject | |
{ | |
NSObject *iProtected; | |
@package | |
NSObject *iPackage; | |
@private | |
NSObject *iPrivate; | |
@protected | |
NSObject *iProtected2; // default access. Only visible to subclasses. | |
@public | |
NSObject *iPublic; | |
} | |
@property (nonatomic,strong) NSObject *iPublic2; | |
@end |
This file contains hidden or 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
#import "Animal.h" | |
// Same behaviour for categories (x) than for class extensions (). | |
@interface Animal(){ | |
@public | |
NSString *iNotVisible; | |
} | |
@property (nonatomic,strong) NSObject *iNotVisible2; | |
@end | |
@implementation Animal { | |
@public | |
NSString *iNotVisible3; | |
} | |
-(id) init { | |
self = [super init]; | |
if (self){ | |
iProtected = @"iProtected"; | |
iPackage = @"iPackage"; | |
iPrivate = @"iPrivate"; | |
iProtected2 = @"iProtected2"; | |
iPublic = @"iPublic"; | |
_iPublic2 = @"iPublic2"; | |
iNotVisible = @"iNotVisible"; | |
_iNotVisible2 = @"iNotVisible2"; | |
iNotVisible3 = @"iNotVisible3"; | |
} | |
return self; | |
} | |
@end |
This file contains hidden or 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
#import "Animal.h" | |
@interface Cow : Animal | |
@end |
This file contains hidden or 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
#import "Cow.h" | |
#include <objc/runtime.h> | |
@implementation Cow | |
-(id)init { | |
self=[super init]; | |
if (self){ | |
iProtected = @"iProtected"; | |
iPackage = @"iPackage"; | |
//iPrivate = @"iPrivate"; // compiler error: variable is private | |
iProtected2 = @"iProtected2"; | |
iPublic = @"iPublic"; | |
self.iPublic2 = @"iPublic2"; // using self because the backing ivar is private | |
//iNotVisible = @"iNotVisible"; // compiler error: undeclared identifier | |
//_iNotVisible2 = @"iNotVisible2"; // compiler error: undeclared identifier | |
//iNotVisible3 = @"iNotVisible3"; // compiler error: undeclared identifier | |
} | |
return self; | |
} | |
@end | |
@implementation Cow(blindAcess) | |
- (void) setIvar:(NSString*)name value:(id)value { | |
Ivar ivar = class_getInstanceVariable([self class], [name UTF8String]); | |
object_setIvar(self, ivar, value); | |
} | |
- (id) getIvar:(NSString*)name { | |
Ivar ivar = class_getInstanceVariable([self class], [name UTF8String]); | |
id thing = object_getIvar(self, ivar); | |
return thing; | |
} | |
-(void) blindAccess { | |
[self setIvar:@"iNotVisible" value:@"iMadeVisible"]; | |
[self setIvar:@"_iNotVisible2" value:@"iMadeVisible2"]; | |
[self setIvar:@"iNotVisible3" value:@"iMadeVisible3"]; | |
NSLog(@"\n%@ \n%@ \n%@", | |
[self getIvar:@"iNotVisible"], | |
[self getIvar:@"_iNotVisible2"], | |
[self getIvar:@"iNotVisible3"]); | |
} | |
@end |
This file contains hidden or 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
#import "Cow.h" | |
#import <Foundation/Foundation.h> | |
int main(int argc, char *argv[]) { | |
@autoreleasepool { | |
Cow *cow = [Cow new]; | |
[cow performSelector:@selector(blindAccess)]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment