3.属性、点语法

属性:属性是一对setter、getter方法。

属性的声明:在.h文件中声明,使用@property关键字声明属性
属性类型是setter方法中参数类型,也就是getter方法中返回值类型
属性名:name,不加下划线,只有实例变量才加下划线 @property (nonatomic, copy)NSString *name 以上这句等价于声明一对声明setter、getter方法
- (void)setName:(NSString *)name;
- (NSString *)name;
属性的实现:在.m文件中,使用@synthesize关键字实现属性

等号左边是属性名,等号右边是实例变量。
属性name对应实现的是setter方法,是为关联的实例变量进行赋值,而对应的getter方法,是获取关联实例变量的值。 @synthesize name = _name;
以上一句等价于一对实现setter、getter方法
- (void)setName:(NSString *)name{
          _name = name;
 }
- (NSString *)name{
       return _name;
}
@synthesize在类的实现部分
在Xcode4.5以及之后的版本中,@sythesize可以省略,在.h文件中只使用@property声明属性即可。编译器默认声明对应的实例变量。(即不用在声明中出下划线对应的_name这种,而是由系统自动生成,但是生成的实例变量的可见度是私有的,子类不能访问) 如果在.h文件中只声明了@property,而在.m文件中重写了setter、getter方法,必须用@sythesize实现属性,才能生成实例变量。
属性的特性设置(属性的属性)
1、读写特性
①readwrite,默认的,可读可写,编译器声明了setter、getter方法。
②readonly,只读,编译器只声明了getter方法。
③setter=,设置编译器声明的setter方法的名字。
④getter=,设置编译器声明的getter方法的名字,一般用在BOOL类型的属性
@property(nonatomic, getter = isDeath)BOOL death; @property (readwrite, setter=aa:, getter=bb) NSInteger age;//修改age的setter、getter方法名
2、原子性
①atomic 原子性,默认修饰符,提供线程安全保护,通过不断的加锁解锁实现在同一时刻实例变量只能被一个线程访问,但是不断的加锁解锁会耗费大量的CUP性能。
②nonatomic 非原子性,setter、getter方法内部不会做多线程的处理,不保证安全,但大多数情况下使用。
3、语义性(属性中最重要的属性)
①assign 修饰的是非对象类型基本数据类型(int float等)、delegate使用 @property (nonatomic)CGFloat height;//默认readwrite、assign ②retain 对象类型
③copy 也是用来修饰对象类型的属性,但是一定要保证,代表属性类型的这个类,必须接收了NSCopying协议,而且实现了copyWithZone:方法。字符通常用copy修饰。 @property (nonatomic, copy)NSString *major;
每个语义都有各自对应的getter、setter方法可以不使用编译器的方法自己自定义方法。
在类的内部,自己实现setter、getter方法:

①语义设置为assign时,setter、getter的内部实现,直接赋值。

②语义设置retain时,间接赋值

③语义设置copy时,间接赋值
点语法:
点语法是一种快捷访问属性的方法 在不同的语境下,点语法会代指setter、getter方法 如果点语法出现在等号的左边,并且存在赋值意义,那么就是setter方法
如果点语法出现在等号右边,那么就是初值的getter方法

时间: 2024-08-06 19:44:38

3.属性、点语法的相关文章

HQL属性查询语法?

上面的HQL:"from Street" ,将取出Steet的所有对象记录,对应的SQL语句为"select * from street"在Hibernate中执行查询的时候,如果实体存在继承关系,将会进行继承关系判定,如:"from Street"将返回所有Street以及Street子类的记录假设:系统中存在Street的两个子类StreetA和StreetB,那么from Street返回的记录将包含这两个子类的所有数据,即使StreetA

Obj-c7[属性,点语法]

//声明一个属性等价与声明了一个setter和getter方法//         属性的类型  属性名//属性的类型决定生成的setter参数类型和getter返回值类型//属性名决定于生成的setter方法名和getter方法名// 属性  属性的类型  属性名 @property (nonatomic, retain)NSString * name; //@synthesize 属性的实现 name = _name的含义是//属性帮你生成的setter方法内部在操作那个实例变量.如果.h里

HQL多个属性查询语法

String hql="select id,name from Street"; 例如:Configuration conf=new Configuration().configure();        SessionFactory sf=conf.buildSessionFactory();        Session session=sf.openSession();        Query query=session.createQuery("select new

取得MSSQL表中字段及主键等属性SQL语法

SELECT c.NAME AS [Column Name], t.NAME AS [Data type], c.max_length AS [Max Length], c.precision, c.scale, c.is_nullable AS [Is Nullable], c.is_identity AS [Is Identity], ISNULL(i.is_primary_key, 0) [Primary Key], i.type_desc, OBJECT_SCHEMA_NAME(fk.o

Linux gcc支持的语法 __attribute__ 属性设置

__attribute__实际上是gcc专有的一种语法,是用来设置函数属性.变量属性.类属性的 语法:之前在C中的结构体对齐中提到过,当时是用来告诉编译器这个结构体的对齐方式 ,其实他还有很多种用法,可以设置很多的属性.语法: __attribute__ (parameter)对于变量: int a __attribute__ ((xxxxx)) = 10; //也可以放在变量的前面,比较灵活 int a __attribute__ ((xxxxx)); // 也可以放在变量的前面,比较灵活对于

ES6入门六:class的基本语法、继承、私有与静态属性、修饰器

基本语法 继承 私有属性与方法.静态属性与方法 修饰器(Decorator) 一.基本语法 1 class Grammar{ 2 constructor(name,age){ //定义对象自身的方法和属性 3 this.name = name, 4 this.age = age 5 } 6 // 在原型上定义只读属性 7 get inva(){ 8 return "JS"; 9 } 10 //在原型上定义可读写属性 11 set skill(val){ 12 this._skill =

JSON语法

JSON基于JavaScript对象字面量 所谓字面量,是对数据值的具体表示.它的字面意思与其想要表达的意思是完全一致的.因为数据交换格式的核心是数据,所以JSON中并不会涉及JavaScript对象字面量中的函数.JSON所基于的JavaScript对象字面量单纯指对象字面量及其属性的语法表示. 名称--值对 JSON中使用冒号(:)来分割名称和值,名称始终在左侧,值始终在右侧. 正确的JSON语法 1.名称始终需要被双引号包裹,而不能使用单引号: 2.为了获得最大可移植性,定义名称时应尽可能

Swift静态属性

在介绍静态属性之前,我们先来看一个类的设计,有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名).在这3个属性中,amount和owner会因人而异,不同的账户这些内容是不同的,而所有账户的interestRate都是相同的.amount和owner属性与账户个体有关,称为实例属性.interestRate属性与个体无关,或者说是所有账户个体共享的,这种属性称为静态属性或类型属性.3种面向对象类型(结构体.枚举和类

swift 语法总结

原文:http://www.cocoachina.com/newbie/basic/2014/0612/8803.html 语句 语句语法 statement → expression ; opt statement → declaration ; opt statement → loop-statement ; opt statement → branch-statement ; opt statement → labeled-statement statement → control-tra

javascript的基础知识及面向对象和原型属性

自己总结一下javascript的基础知识,希望对大家有用,也希望大家来拍砖,毕竟是个人的理解啊 1.1 类型检查:typeof(验证数据类型是:string) var num = 123; console.log(typeof num); // 1.2 in 运算符 作用:判断指定属性是否存在于指定的对象中. 如果指定的属性存在于指定的对象中,则 in 运算符会返回 true. 语法: 属性 in 对象 返回值:true 或者 false 示例: var obj = { age: 18 };