简体   繁体   中英

Set readonly attribute in ObjC

Is there a way to set a value to readonly attribute in Objective-C? I actually don't care how nasty the code is unless it isn't stable anymore.

Never mind my comment, here's the two ways you do it:

@interface Grimley : NSObject
@property (readonly, copy) NSString * blabber;
@property (readonly, copy) NSString * narwhal;

- (id) initWithBlabber:(NSString *)newBlabber;
@end

@implementation Grimley
@synthesize blabber;
@synthesize narwhal = unicorn;

- (id) initWithBlabber:(NSString *)newBlabber {
    self = [super init];
    if( !self ) return nil;

    // Any object can of course set its own ivar regardless
    // of how the property it backs is declared.
    blabber = [newBlabber copy];
    // Refer to the _ivar_, not the property.
    unicorn = @"One horn";

    return self;
}
@end

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Grimley * g =  [[Grimley alloc] initWithBlabber:@"Excelsior"];

    // This is how you get around the property.
    [g setValue:@"Nimitz" forKey:@"blabber"];
    // Again, use the name of the variable, not the property
    [g setValue:@"Pearly horn" forKey:@"unicorn"];

    NSLog(@"%@", [g blabber]);
    NSLog(@"%@", [g narwhal]);

    [g release];
    [pool drain];
    return 0;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM