欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

知识梳理之@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>