IOS之学习笔记五(合成存取方法)

举报
chenyu 发表于 2021/07/26 23:27:52 2021/07/26
【摘要】 一、主要属性介绍 1、自动合成setter、getter方法 1)、接口部分@property指定属性  2)、实现部分@synthesize 如果 @syntheszie  widows = _windows 这里成员变量名是_windows,而不是windows     2、atomic(nonatomic) 这里...

一、主要属性介绍

1、自动合成setter、getter方法

1)、接口部分@property指定属性  2)、实现部分@synthesize

如果

@syntheszie  widows = _windows

这里成员变量名是_windows,而不是windows

 

 

2atomic(nonatomic)

这里主要是指存取方法为原子操作,实现线程安全,atomic是默认,保证线程安全,但是会导致性能降低,单线程我们一般考虑nonatomic

 

 

3、copy

用这个修饰了属性名,把副本值设置给类的属性,如果赋值的副本发生改变,但是类部的属性值不会改变

 

 

4、getter、setter

如果(getter = ff1, setter = ff2),会把默认的getter方法改为ff1, 会把默认setter方法改为ff2,我们调用的时候就是[对象 ff1]、[对象 ff2]

 

 

5、readonly、readwirte

readonly是指系统指合成getter方法,不合成setter方法

readwirte是默认的,都合成

 

 

6、retain

使用retain指示定义属性时,当莫个对象赋值给属性时,该属性原来所引用的对象引用计数减1,被赋值对象的引用计数加1

当一个对象的引用计数大于1时,该对象不该被回收。

 

 

7、strong、weak

strong:指被赋值对象持有强引用,不会自动回收

weak:使用弱引用指向被赋值对象,该对象可能被回收

 

 

 

 

 

 

 

二、测试demo

User.h


  
  1. #ifndef User_h
  2. #define User_h
  3. #import <Foundation/Foundation.h>
  4. @interface User : NSObject
  5. @property (nonatomic) NSString *name;
  6. @property (nonatomic) NSString *city;
  7. @property (nonatomic, copy) NSString *add;
  8. @property NSString *pass;
  9. @property NSDate *birth;
  10. @property NSDate *birth1;
  11. @end
  12. #endif /* User_h */

 User.m


  
  1. #import <Foundation/Foundation.h>
  2. #import "User.h"
  3. @implementation User
  4. @synthesize name = _name;
  5. @synthesize pass;
  6. @synthesize birth;
  7. -(void) setName:(NSString *)name
  8. {
  9. self->_name = [NSString stringWithFormat:@"hello%@", name];
  10. }
  11. @end

main.m文件


  
  1. #import <UIKit/UIKit.h>
  2. #import "AppDelegate.h"
  3. #import "Person.h"
  4. #import "Apple.h"
  5. #import "User.h"
  6. #import "Args.h"
  7. #import "KVCPerson.h"
  8. int main(int argc, char * argv[]) {
  9. @autoreleasepool {
  10. User *user = [User new];
  11. NSMutableString *name = [NSMutableString stringWithString:@"chencaifeng"];
  12. NSMutableString *city = [NSMutableString stringWithString:@"hunan"];
  13. NSMutableString *addr = [NSMutableString stringWithString:@"luyunlu"];
  14. [user setName:name];
  15. [user setCity:city];
  16. [user setAdd:addr];
  17. [user setPass:@"hello"];
  18. [user setBirth:[NSDate date]];
  19. NSLog(@"name is %@, and pass is %@, birth is%@, city is%@, add is %@", [user name], [user pass], [user birth], [user city], [user add]);
  20. //我们把setName函数重写了,虽然name后面追加了字符串,但是后面打印值没有改变
  21. [name appendString:@"chenyu"];
  22. //由于这里属性没有加copy,city后面追加了字符串,所以后面打印也变了
  23. [city appendString:@"changsha"];
  24. //由于这里属性加了copy,由于这个addr后面值追加了,所以后面打印不会改变
  25. [addr appendString:@"kanyunlu"];
  26. NSLog(@"name is %@, and pass is %@, birth is%@, city is%@, add is %@", [user name], [user pass], [user birth], [user city], [user add]);
  27. //这里是用.操作
  28. user.add = @"hello";
  29. NSLog(@"user add is %@", user.add);
  30. }
  31. }

 

 

 

 

 

 


三、运行结果


  
  1. name is hellochencaifeng, and pass is hello, birth isFri Jul 6 19:51:04 2018, city ishunan, add is luyunlu
  2. name is hellochencaifeng, and pass is hello, birth isFri Jul 6 19:51:04 2018, city ishunanchangsha, add is luyunlu
  3. user add is hello

 

 

 

 

 

 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/80945576

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。