一、属性
       属性是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. 学习资料 数据查询语言DQL

    数据查询语言DQL介绍及其应用: 查询是SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句.用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句,它提供 ...

  2. No.003 Longest Substring Without Repeating Characters

    Longest Substring Without Repeating Characters Total Accepted: 167158 Total Submissions: 735821 Diff ...

  3. H264转成RGB24格式-2016.01.21

    #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #include "l ...

  4. 实现弹出收回菜单效果ios源码

    REMenu能够提供下弹出来的菜单,跳转到不同的vc后菜单便会收起.菜单的弹收都有回弹(bounce)的效果.效果图: <ignore_js_op> 使用方法: 先把REMenu的文件夹复 ...

  5. nodejs前端自动化构建

    http://99jty.com/?p=1257 http://www.jankerli.com/?p=1628 http://www.cnblogs.com/zhepama/archive/2013 ...

  6. Objective-C基本数据类型、表达式和语句

    一.基本数据类型 1.一般的计算机语言在定义变量的时候,需要提供给两个内容:类型和名字. 比如:int myClassID; 2.在Xcode中,无论你使用的是GCC编译器还是LLVM编译器,如果我们 ...

  7. Cassandra 计数器counter类型和它的限制

    文档基础 Cassandra 2.* CQL3.1 翻译多数来自这个文档 更新于2015年9月7日,最后有参考资料 作为Cassandra的一种类型之一,Counter类型算是限制最多的一个.Coun ...

  8. 关于commons-fileupload组件上传文件中文名乱码问题

    java web开发,常用到的文件上传功能,常用的commons-fileupload和commons-io两个jar包.关于如何使用这两个jar来完成文件上传的功能,这里不做详解.使用commons ...

  9. redis的数据类型

    redis有string,hash,list,sets.zsets几种数据类型 1.string数据类型 可包含任何数据,是二进制安全的,比如图片或者序列化的对象set key valueset na ...

  10. mysql中character_set_connection的作用

    character_set_client = x character_set_results = xcharacter_set_connection = x; 我们常用在mysql操作类中使用这三面, ...