知识梳理之@property
程序员文章站
2022-03-30 09:00:40
...
PS:记录自己工作学习中的一些知识;
[email protected]是什么?
@property是声明属性的语法,是一个编译器指令,它可以快速方便的为一个实例变量创建setter/getter,并允许我们用点语法使用。
2.传统的setter/getter方法.
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject {
// 定义成员变量 姓名
NSString *name;
}
// 声明成员变量name的set方法
- (void)setName:(NSString *)newName;
// 声明成员变量name的get方法
- (NSString *)name;
@end
</code></pre>
Student.m
#import "Student.h"
@implementation Student
// 实现set方法
- (void)setName:(NSString *)newName {
name = newName;
}
// 实现get方法
- (NSString *)name {
return name;
}
@end
</code></pre>
main.m
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Student *stu = [[Student alloc]init];
// 设置name
[stu setName:@"tnan"];
NSLog(@"My name is %@",[stu name]);
}
return 0;
}
</code></pre>
输出:基础知识之@property[1298:113851] My name is tnan
3.使用@property代替传统的set/get方法
.h
#import <Foundation/Foundation.h>
@interface Student : NSObject {
// 定义成员变量 姓名
NSString *name;
}
// 使用@property声明name
@property (nonatomic, strong)NSString *name;
// 声明成员变量name的set方法
- (void)setName:(NSString *)newName;
// 声明成员变量name的get方法
- (NSString *)name;
@end
////////////////////
.m
#import "Student.h"
@implementation Student
//方便我们看清楚是否调用set/get加入NSLog(@"%s",__func__);
// 实现set方法
- (void)setName:(NSString *)newName {
name = newName;
NSLog(@"%s",__func__);
}
// 实现get方法
- (NSString *)name {
NSLog(@"%s",__func__);
return name;
}
@end
////////////////////
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Student *stu = [[Student alloc]init];
// 设置name
// [stu setName:@"tnan"];
stu.name = @"tnan";
NSLog(@"My name is %@",[stu name]);
}
return 0;
}
输出:
基础知识之@property[1413:120618] -[Student setName:]
基础知识之@property[1413:120618] -[Student name]
基础知识之@property[1413:120618] My name is tnan
很明显先set后get,一目了然。
最终代码是这样的,简洁,方便
.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
// 使用@property声明name
@property (nonatomic, strong)NSString *name;
@end
////////////////////
.m
#import "Student.h"
@implementation Student
@end
////////////////////
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Student *stu = [[Student alloc]init];
// 设置name
stu.name = @"tnan";
NSLog(@"My name is %@",[stu name]);
}
return 0;
}
</code></pre>
上一篇: Vueä¸çwatch
下一篇: vue中的watch