属性声明和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环境下
//
// 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
网友评论