您的位置:首页 > 其它

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

2017-07-21 10:33 585 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐