一、属性
       属性是Objective—C 2.0定义的语法,为实例变量提供了setter、getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性
       OC中的属性机制提供了便捷的设置和获取实例变量的方式,或者说属性提供了一个默认的设置器和访问器的实现;属性提供的方法是现实可配置的,属性的好处:相当于自己编写这一对方法,属性提供了一系列清晰分明的说明参数来定义设置器和访问器的行为,编译器可以根据你设置的说明参数为你生成相应的方法,减少你的代码量和维护工作量
       设置器(setter)与访问器(getter),提供了一个外界操作类内部属性的通道。因为类的属性,一般是私有的(private)假如没有这个方法那么这个属性的织就不能被外界所改变                           
(一)、属性的定义
属性的声明:使用@property声明属性
例如:@property NSString *name;
相当于@interface中声明了两个方法(setter和getter):
- (void)setName:(NSString *)name;
- (NSString *)getName;
(二)、属性的实现
属性的实现:使用@synthesize实现属性
例如:@ynthesize name = _name;
相当于@implementation实现了setter、getter
- (void)setName:(NSString *)name
{——}
- (NSString *)getName
{——}
例如定义一个完整的Person类,包含实例变量、属性、初始化方法、便利构造器方法以及功能方法:
h文件中如下:
 
 
m文件中如下:
   main.m文件中如下:
 
二、属性的属性
Objective-C提供属性是得目的是为了简化程序员代码
为属性提供了一些关键字用以控制setter、getter的实现细节
这些关键字我们称为属性的属性(attribute)
一共3大类attribute
    第一类:读写性控制 (readonly、readwrite、stter、getter)
readonly,告诉编译器,只声明getter方法(无setter方法)
例如:@property(readonly)NSString *name;
等价于- (NSString *)getName;
 
readwrite,告诉编译器,既声明setter又声明getter
例如:@property(readwrite)NSString *name;
等价于 - (void)setName:(NSString *)name;
- (NSString *)getName;
readwrite是读写性控制的默认设置
     第二类:原子性控制 (nonatomic、atomic)
atomic。setter、getter方法在多线程访问下是绝对安全的,即setter、getter内部做了多线程访问处理。原子性控制的默认设置是atomic
nonatomic。setter、getter方法内部不会做多线程访问处理,仅仅是普通的setter、getter方法
程序开发过程中,setter、getter处处都在用,如果使用atomic,需要不断的对setter、getter枷锁解锁以保证线程访问安全,会很占用系统资源,降低系统性能
通常设置为nonatomic,某些属性需要线程安全的时候,才定义为atomic。
例如:@property(readwrite,nonatomic)NSString *name;
等价于 - (void)setName:(NSString *)name;
- (NSString *)getName;
     第三类:语义设置 (assign、retain、copy)
assign。setter、getter内部实现是直接赋值
例如:@property (nonatomic,assign)NSString *name;
- (void)setName:(NSString *)name {
          _name = name;
}
- (NSString *)name {
          return _name;
}
retain。setter、getter放入内部实现会做内存优化
 
 
copy。setter、getter的内部实现也会做内存优化
如果属性是非对象类型(比如int,float等)属性的语义设置使用assign
如果属性是对象类型(比如NSString、NSArray等)属性的语义设置使用retain
如果属性是对象并想得到参数的copy,使用copy关键字
 
三、点语法
点语法是Objective-C 2.0中定义的语法格式。提供了一种便捷的属性访问方式
点语法的使用
分时符合系统默认setter、getter书写格式的方法都可以使用点语法
例如:[person1 setName:@“zhangsan”];可以等价写成
person1.name = @“zhangsan”;。
 
NSString *name = [person1 name];可以等价写成
NSString *name = person1.name;
属性是一对getter、setter方法,点语法是属性的另一种调用格式
使用点语法进行赋值:
    Person *person = [[Person alloc] init];
    person.name = @"zhangsan";
    person.age = 33;
    person.gender = @"male";
    NSLog(@"%@,%ld,%@",person.name,person.age,person.gender);

 
 
 

Objective - C中属性和点语法的使用的更多相关文章

  1. VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别

    在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见.比如最常用的:Worksheet.Range("A1:A10")  VB的语法,使用参数的不一定是方法,也有可能是属性 ...

  2. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  4. OC:属性、点语法、KVC

    //属性的属性 属性定义在一个 .h文件里,在这个.h文件里可以定义实例变量(就是这个类的特征),也可以通过   @protery(属性约束关键字) 属性名字类型 属性名 来定义一些属性,在prope ...

  5. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  6. 域对象中属性变更及感知session绑定的事件监听器

    域对象中属性的变更的时间监听器就是用来监听ServletContext,HttpSession,HttpServletRequest这三个对象中的属性变更信息事件的监听器.这三个监听器接口分别是Ser ...

  7. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  8. js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)

    js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量) 一.总结 1.html中属性规范是 ...

  9. LaTeX中Python代码的语法高亮

    LaTeX中Python代码的语法高亮 本文中,"{}"中的字母为LaTeX或Python的包名,只有"Pygments"是Python的包,其他都是LaTeX ...

随机推荐

  1. 学习练习 java 验证码练习

    String str="1234567890qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM "; int b[]=new ...

  2. 创投女王徐新:如何迅速做到细分市场第一(FW)

    http://mp.weixin.qq.com/s?__biz=MjM5NzUxNTQ2Mw==&mid=203368116&idx=2&sn=e586a2f28dfb2b50 ...

  3. 在Win7下要通过某个 线程 来调用SavaDialog文件选择框的问题

    如果 在Win7下要通过某个 线程 来调用SavaDialog文件选择框的代码  选择窗口 有时会出不来 需要设置如下:    ThreadthreadOfRec = new Thread(Reciv ...

  4. 2016-03-15:关于VS中模块定义文件

    1 def模块定义文件 在使用开源库libx265时,因x265项目的头文件x265中有如下的宏定义 #ifdef X265_API_IMPORTS #define X265_API __declsp ...

  5. docker 换更优秀的 文件系统 比如 OverlayFS(centos7 overlay2)

    内容摘自:http://www.projectatomic.io/blog/2015/06/notes-on-fedora-centos-and-docker-storage-drivers/ doc ...

  6. IIS7下,flush无效,解决方案

    打开文件 C:\Windows\System32\inetsrv\config\applicationHost.config ,注意如果你的是64位系统,这个文件就必须用64位的编辑软件打开,32位的 ...

  7. vim 文字插入

    我们知道VIM中,普通的复制和粘贴都是YY和PP.那么怎么将vim以外的文件插入到vim编辑器中呢!这是个问题: 首先我们要选中想要插入的文字,如: 然后进入vim插入模式:SHIFT + Inser ...

  8. C#中保留两位小数但不四舍五入的最优做法

    多种做法比较 class Program_保留两位小数但不四舍五入 { static void Main(string[] args) { Helper.Run(delegate () { metho ...

  9. SublimeText快捷键大全(附GIF演示图)

    Sublime Text是码农必备之神器,有助于码农快速开垦,如果掌握了Sublime强大的快捷键就可以飞起来了.下面下载吧小编汇总了SublimeText支持的全部快捷键(适用SublimeText ...

  10. Linux redis 配置文件

    # Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...