oc 基础 set 方法和 get 方法

2021-03-18  本文已影响0人  xq9527

属性声明和set 方法 get方法声明

//
//  Person.h
//  SeterAndGeter
//
//  Created by xuqing on 2021/3/18.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject{
    NSString * _name;
    NSUInteger _age;
    NSString* _sex;
}
- (void)setName:(NSString *)name;
- (void)setAge:(NSUInteger)age;
- (void)setSex:(NSString *)sex;
- (NSString*)name;
- (NSUInteger)age;
- (NSString*)sex;
@end
NS_ASSUME_NONNULL_END

set 方法和get方法实现

//
//  Person.m
//  SeterAndGeter
//
//  Created by xuqing on 2021/3/18.
//
#import "Person.h"
@implementation Person
- (void)setName:(NSString *)name{
    _name=name;
}
- (void)setAge:(NSUInteger)age{
    _age=age;
}
- (void)setSex:(NSString *)sex{
    _sex=sex;
}
- (NSString *)name{
    return  _name;
}
- (NSUInteger)age{
    return  _age;
}
- (NSString *)sex{
   
    return _sex;
}
- (NSString *)description{
    return [NSString stringWithFormat:@"name= %@ ,age =%zd, sex =%@", _name,_age,_sex];
}
@end

更改工程处理mrc环境下

image.png
//
//  Person.m
//  SeterAndGeter
//
//  Created by xuqing on 2021/3/18.
//

#import "Person.h"

@implementation Person
- (void)dealloc
{
    [_name release];
    [_sex release];
    [super dealloc];
  
}
- (void)setName:(NSString *)name{
    if(name!=_name){
        [_name release];
        _name= [name retain];
    }
    //_name=name;
}


- (void)setAge:(NSUInteger)age{
    _age=age;
    
}
- (void)setSex:(NSString *)sex{
    if(sex!=_sex){
        [_sex release];
        _sex= [sex retain];
    }
    //_sex=sex;
    
}


- (NSString *)name{
    return  _name;
}

- (NSUInteger)age{
    return  _age;
}
- (NSString *)sex{
    return _sex;
}
- (NSString *)description{
    return [NSString stringWithFormat:@"name= %@ ,age =%zd, sex =%@", _name,_age,_sex];
}

@end

在mrc的环境下我们要最对于NSString 引用类型数据 进行有严格的么内存管理 我们需要在 dealloc 方法中 release 掉我们变量占用的内存 然后我们在 set 方法中要进行变量赋值判断 当我们传入变量没有发生改变我们不执行 变量赋值 和返回

- (void)setName:(NSString *)name{
    if(name!=_name){
        [_name release];
        _name= [name retain];
    }
    //_name=name;
}

然后get 方法跟我们在arc 环境下面是一样的 我们就不展开讲了 现在苹果也很好的支持了 arc 在arc 环境下我们就不用考虑复杂的内存引用管理了

外部调用 并打印效果

//
//  main.m
//  SeterAndGeter
//
//  Created by xuqing on 2021/3/18.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person * person= [[Person alloc]init];
        [person setName:@"张冰"];
        [person  setAge:10];
        [person setSex:@"女"];
        NSLog(@"%@", [person name]);
        NSLog(@"%@",[person sex]);
        NSLog(@"%zd",[person age]);
        NSLog(@"%@",person);
    }
    return 0;
}

日志观察


image.png
上一篇 下一篇

猜你喜欢

热点阅读