@property括号内属性讲解
#import <Foundation/Foundation.h>@interface Car : NSObject@property BOOL running;
@endCar.m#import "Car.h"@implementation Car@synthesize running = _running; //Xcode 4.4以上可选
@end
-(BOOL)running
{return _running;
}
-(void)setRunning:(BOOL)running
{_running = running;
}
当用
Car *honda = [[Car alloc] init];honda.running = YES;NSLog(@"%d",honda.running);
@property(getter=isRunning) BOOL running;
Car *honda = [[Car alloc] init];honda.running = YES;NSLog(@"%d",honda.running);NSLog(@"%d",[honda isRunning]);
#import <Foundation/Foundation.h>
@interface Car : NSObject@property(getter=isRunning,readonly) BOOL running;-(void)startEngine;
-(void)stopEngine;
@end
-(void)startEngine
{_running = YES;
}
-(void)stopEngine
{_running = NO;
}
Car *honda = [[Car alloc] init];
// honda.running = YES;NSLog(@"%d",honda.running);honda.running = NO;
@property (nonatomic) NSString *model; //设置非原子性
@interface Person : NSObject@property(nonatomic)NSString *name;
@end
#import "Person.h"@implementation Person-(NSString *)description
{return self.name;
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"@interface Car : NSObject@property (nonatomic) NSString *model;
@property(nonatomic,strong) Person *driver;@end
Person *john = [[Person alloc] init];john.name = @"John";Car *honda = [[Car alloc] init];honda.model = @"Honda Civic";honda.driver = john;NSLog(@"%@ is driving the %@",honda.driver,honda.model);
#import <Foundation/Foundation.h>@class Car;@interface Person : NSObject@property(nonatomic)NSString *name;
@property(nonatomic,strong)Car *car;@end
Person *john = [[Person alloc] init];john.name = @"John";Car *honda = [[Car alloc] init];honda.model = @"Honda Civic";honda.driver = john;john.car = honda; //添加这行NSLog(@"%@ is driving the %@",honda.driver,honda.model);
@property(nonatomic,weak)Car *car;
7、copy属性
Car *honda = [[Car alloc] init];honda.model = @"Honda Civic";NSMutableString *model = [NSMutableString stringWithString:@"Honda Civic"];honda.model = model;NSLog(@"%@",honda.model);[model setString:@"Nissa Versa"]; NSLog(@"%@",honda.model); //输出结果还是Honda Civic
- retain属性
- unsafe_unretained属性
- assign属性
- getter= 让getter方法使用自定义的名字
- setter = 让setter方法使用自定义名字
- readonly 不合成setter方法
- nonatomic 不保证在多线程环境下存取访问器的完整性,这比原子性更加高效
- strong 在属性和指定value之间创建一个拥有关系,这是默认的对象属性
- weak 在属性和制定value之间创建一个不拥有关系,使用这个防止循环引用
- copy 创建一个指定值的副本,而不是引用存在的对象实例。
#import "ViewController.h" @interface ViewController () @property (nonatomic,copy)NSArray *constArr; @property (nonatomic,strong)NSMutableArray *mArr; @property (nonatomic,strong)NSString *name; @end @implementation ViewController - (void)viewDidLoad {[super viewDidLoad];_mArr = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];_constArr = _mArr;NSLog(@"%@",self.constArr);[_mArr addObject:@"3"];NSLog(@"%@",self.constArr); } @end
这个例子中,虽然我们对constArr使用的是copy,但是两次打印的结果是不一样的。如果我们这样写:
#import "ViewController.h" @interface ViewController () @property (nonatomic,copy)NSArray *constArr; @property (nonatomic,strong)NSMutableArray *mArr; @property (nonatomic,strong)NSString *name; @end @implementation ViewController - (void)viewDidLoad {[super viewDidLoad];_mArr = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];self.constArr = _mArr;NSLog(@"%@",self.constArr);[_mArr addObject:@"3"];NSLog(@"%@",self.constArr); } @end
输出打印的结果才会是一样的,因为前者只是对实例变量的指针赋值,而后者才是利用了属性特性,对属性进行赋值。这也正解释了我们平时所理解的:
对于strong,为这种属性设置新值得时候,设置方法会先保留新值,并释放旧值,然后将新值设置上去。
对于copy,设置方法并不保留新值,而是将其拷贝。
上面提到的设置方法就是我们说的setter,也就是后者使用self.constArr调用的方法。
转载于:https://www.cnblogs.com/zhanggui/p/4656427.html
@property括号内属性讲解相关推荐
- Python - @property 方法变属性
@property @property是内置的装饰器,与普通装饰器原理是一样的,只不过返回的不是函数,而是类对象. @property负责把一个方法变成属性进行调用,保证对参数进行必要的检查. 属性有 ...
- python正则匹配括号内任意字符,python 正则匹配 获取括号内字符
一.需求 * 提取字典中的[]内的字符,生成可以导入到五笔词库中的txt文件. 原文件: 生成后的结果: 实现方式 前言 因为正则表达式语法很难读,因此本次程序以多次的方式来讲解. 一.提取[]内内容 ...
- association内属性及作用
嵌套查询association内属性及作用 多对一 多表查询 <select id="getUserRolePageList" resultMap="roleLis ...
- oracle取括号内数字,怎么把excel中一列文本中括号里的数字弄出来啊
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:怎么把excel中一列文本中括号里的数字弄出来啊回答:=MID(A1,FIND("(",A1)+1,FIND(")",A1)-FIN ...
- 计算机右键括号内的字母,word软体选单中每个选项旁边都有个带括号的字母,是什么意思?...
word软体选单中每个选项旁边都有个带括号的字母,是什么意思?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! word软 ...
- java 正则 任意字符_Java正则表达式 去掉括号内任意字符
前言: 刚开始以为 (.*) 就是括号内任意字符了,试了不行. 错误点 1.括号需要转义(是正则表达式关键字) 2.不是任意字符,而是 除了右括号的任意字符 String content = &quo ...
- python正则group()的用法—正则提取括号内以及其他符号内内容
python正则提取括号内以及其他符号内内容,我以前学过一点点正则,但是学的不深,用的正则也是最笨的正则方法,只会group(0). 然而,我今天又看了下正则,发现正则的提取确实好用.无论爬虫还是文本 ...
- linux 内存显示括号内字母的含义
当linux系统发生异常或者 echo 'm' > /proc/sysrq-trigger 我们会看到类似以下的信息,其中括号内字符代表什么含义呢?我们跟踪 sysrq-trigger,看看源码 ...
- 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...
最新文章
- 求助大神!怎样除去XML节点反复的值的数据
- how is crmd_product_i inserted to db
- Rabbitmq如何设置优先级队列?如何限流?如何重试?如何处理幂等性?
- Dev的多语言简单实现
- Windows IOCP模型与Linux EPOLL模块之比较-
- Spring Data Jpa 查询返回自定义对象
- 门诊管理系统开发能提高医生的诊疗水平和质量吗
- 证明同步函数使用的this锁
- 上号神器扫码登录网站使用教程
- 服务器带宽上行与下行是什么意思,有什么区别
- 关系数据库——关系操作关系模型的完整性
- Dijkstra迪杰斯特算法(C++版本和JAVA版本)
- python实现图片上打印文字
- 电路板Layout爬电距离、电气间隙的确定
- 微软默默给 curl 捐赠一万美元,半年后才通知
- 逆水寒服务器紫荆之巅有关消息,逆水寒ol:官方钦定19个热门服务器?四大服舞阳城门口人们为患!...
- Install cf v6
- iOS OC Sugars collection
- 终于有人把云计算与数据库的关系讲明白了
- ActiveX 控件注册的几种方法 VC++编写
热门文章
- python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)
- from mysql partition select_通过分区(Partition)提升MySQL性能[原创翻译]
- java poi教程_Java完成POI的功能
- 计算两个经纬度的距离_HTML5 地理定位+地图 API:计算用户到商家的距离
- java非法字符检测_Java Web 一些特殊字符的过滤(appscan检查的安全问题)
- opengl 实时波形显示_OpenGL1------OpenGL概述
- 104.202.60.2/.index.php,web扫描
- java 静态方法 构造方法,Java构造函数和静态方法
- python汇总数据的程序_Python数据处理常用程序模块汇总
- @RunWith@ContextConfiguration进行Spring上下文测试报错