知识梳理之@property

PS:记录自己工作学习中的一些知识;

1.@property是什么?

@property是声明属性的语法,是一个编译器指令,它可以快速方便的为一个实例变量创建setter/getter,并允许我们用点语法使用。

2.传统的setter/getter方法.

Student.h
#import
@interface Student : NSObject {

    // 定义成员变量 姓名
    NSString *name;
}

// 声明成员变量name的set方法
- (void)setName:(NSString *)newName;

// 声明成员变量name的get方法
- (NSString *)name;

@end


Student.m
#import "Student.h"
@implementation Student

// 实现set方法
- (void)setName:(NSString *)newName {

    name = newName;
}

// 实现get方法
- (NSString *)name {

    return name;
}

@end


main.m
#import
#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;
}


输出:基础知识之@property[1298:113851] My name is tnan

3.使用@property代替传统的set/get方法

.h    
#import 
@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 
#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 
@interface Student : NSObject 
// 使用@property声明name
@property (nonatomic, strong)NSString *name;
@end

////////////////////
.m
#import "Student.h"
@implementation Student

@end

////////////////////
#import 
#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;
}

你可能感兴趣的:(知识梳理之@property)