同时重写属性的getter/setter方法和readonly的使用

来源:互联网 发布:网络平台合同范本 编辑:程序博客网 时间:2024/06/08 20:01

1.新建Person类

// Person.h#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, assign, readonly) int age; // 对外只读@property (nonatomic, copy) NSString *name; @end
// Person.m#import "Person.h"@interface Person (){    NSString *_name; // 声明实例变量第一种办法    int _age;}@end@implementation Person//@synthesize name = _name; // 声明实例变量第二种办法// 使用property的时候,单独重写任意一个方法都不会报错,但同时重写set get方法就会报错// 主要是因为当你重写了get和set方法之后@property默认生成的合成方法就不会起作用了,// 这也就意味着你的类不会自动生成出实例变量了,你就必须要自己声明实例变量- (void)setName:(NSString *)name{    _name = name;}- (NSString *)name{    return _name;}- (void)setAge:(int)age{    _age = age;}- (int)age{    return _age;}@end

2.main.m

#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        Person *person = [[Person alloc] init];        person.name = @"Jerry";        NSLog(@"person.name = %@", person.name); // person.name = Jerry        [person setName:@"Poter"];        NSLog(@"person.name = %@", person.name); // person.name = Poter        NSLog(@"person.age = %d", person.age);   // person.age = 0        person.age = 26; // 报错:Assignment to readonly property    }    return 0;}
原创粉丝点击