OC_属性点语法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC_属性点语法相关的知识,希望对你有一定的参考价值。
点语法和@property
**************************************************************************
知识点
1.setter/getter函数
2.点语法
[email protected]语法和属性
========================================
一、setter和getter方法
1.setter和getter方法的作用
setter 方法: 修改对象的字段/实例变量
getter 方法: 读取对象的字段/实例变量
setter 方法: 可以带有多个参数,可以同时给多个变量赋值
getter方法: 不带参数,只能返回一个变量的值。
2.setter和getter如何命名
setter 方法的命名:
_xxx: 表示的是成员变量的名字
//带有一个参数
- (void)setXxx:(参数类型)参数1;
//带有多个参数
- (void)setXxx:(参数类型)变量名字 xxx:(参数类型)变量名字 ……;
getter 方法的命名:
- (返回值类型)xxx;
3.成员变量的命名
带上下划线
=======================================
二、点语法
1.为什么要设计点语法
C ++, jave ,c# 都有点语法 为了让程序设计简单化
2.点语法的作用
属性可以在不使用 【对象指针 方法名字】 的情况下使用点语法。
点语法只是访问setter getter方法,不是使用成员变量。注意和结构体的区别。
3.点语法的调用
//一个参数的set方法可以使用点语法赋值
[xiaoxin setName:@“小新”];
//这不是使用成员变量,是使用set方法
xiaoxin.name = @"小新";
//可以通过.语法调用get方法
NSString * ret = [xiaoxin name];
ret = xiaoxin.name;
//xiaoxin.name在等号左边就是set方法,使用这个表达式的值,就是get方法
***************************************************************************************
练习:
写一个Person类, 使用点语法赋值和取值:
NSStirng *_name;
NSInteger _age;
NSString *_identical; //身份证
=======================================
三、属性(@property)和合成(@synthesize)
1.思考:当一个类中的成员变量非常多的时候,setter和getter是否会显得非常臃肿,@property和@synthesize可以使代码变得简洁。
1) 让编译器自动声明setter和getter
1) @property 成员变量类型 变量名;
//声明一个属性,相当于声明了下面两个方法
//声明一个属性,而且会同时生成一个名为_xxx的成员变量
@property NSString * name;
//- (void)setName:(NSString *)name;
//- (NSString *)name;
//会自动关联名为_name的变量;//_name是私有的
1)让编译器自动实现setter和getter函数
[email protected]使用(Xcode4.6以后可以省略)
@synthesize name = _name;
//Xcode4.6以前,需要这样实现,如同实现了下面两个方法;
//Xcode4.6起,无需写@synthesize,自动实现下面两个方法,会自动关联名为_xxx的变量;
//如果类中并没有对应的变量,会自动生成相应的变量。
========================================================
练习:
定义一个书本的类:
字段: 书名 name
页数 pages
价格 price
作者 author
要求使用:@property 实现set和get方法。使用点语法操作set、get
======================================
@property属性
1.原子操作
atomic(缺省)/nonatomic
(1)atomic(默认值) 原子性:对当前属性进行加锁,线程安全的。消耗 性能。访问速度慢。
(2)nonatomic 非原子性:不需要加锁,线程不安全的。访问速度快。
//UI所有的属性都要用:nonatomic
2. assign 直接赋值修饰符(缺省),一般用在基本类型。
//缺省(默认)修饰符
@property (assign) NSString * name;
//同时生成set、get方法
直接赋值,展开的set方法:
- (void)setName:(NSString *)name
{
_name = name;
}
3.读写操作
readonly/readwrite(缺省)
//只读修饰符
//只生成getter,没有setter
@property (readonly) NSUInteger age;
/缺省修饰符
//同时生成set、get方法
@property (readwrite) NSString *name;
4. 给set方法和get方法起别名
//getter修饰符
//给get方法起别名
@property (getter = myWeight) NSUInteger weight;
//setter修饰符
//给set方法起别名
@property (setter = setLife:) BOOL alive;
//一个属性可以添加多个修饰符,多个修饰符间用逗号隔开。
@property (setter = setUsername:, getter = getUsername,readonly) NSString *name;
5. 多个属性修饰符,需要用逗号隔开
@property (nonatomic, readonly,getter = birth)
NSString * birthday;
以上是关于OC_属性点语法的主要内容,如果未能解决你的问题,请参考以下文章