一、属性
       属性是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. c#中如何得到百分比数值

    //此方法得到的百分比后小数太多,不行double percent=Convert.ToDouble(2)/Convert.ToDouble(34);string result=(percent*10 ...

  2. iptable原理

    http://www.cnblogs.com/littlehann/p/3708222.html http://seanlook.com/2014/02/23/iptables-understand/ ...

  3. javascript 实现HashTable(哈希表)

    一.javascript哈希表简介 javascript里面是没有哈希表的,一直在java,C#中有时候用到了这一种数据结构,javascript里面若没有,感觉非常不顺手.细细看来,其实javasc ...

  4. Linux下多线程编程

    一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...

  5. hbase删除region块的脚本

    删除hbase表region块脚本 文件hua.txt格式: CHAT_INFO,1318153079100530000314050,1318173760068.991ca04ff164c3f7987 ...

  6. Track files and folders manipulation in Windows

    The scenario is about Business Secret and our client do worry about data leakage. They want to know ...

  7. Android WebRTC 音视频开发总结(一)

    本系列文章主要总结和分享WebRTC开发过程中的一些经验,转载请说明出处(博客园RTC.Blacker),更多交流与合作请看页面上方的子标题! 一.WebRTC是什么? 可能您还不知道WebRTC是什 ...

  8. leetcode3:不重复的最长子串长度

    package hashmap; import java.util.HashMap; import java.util.Map; public class hashmap { public stati ...

  9. 深入了解Javascript模块化编程

    本文译自Ben Cherry的<JavaScript Module Pattern: In-Depth>.虽然个人不太认同js中私有变量存在的必要性,但是本文非常全面地介绍了Javascr ...

  10. 集群session的一致性

    一. 何为session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(sessio ...