一、属性
       属性是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. JS实现星级评分

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. 如何用手机维护Mysql数据库

    如何用手机维护网站数据库 身边很多人都在拿ipad或iphone来玩儿游戏或听歌,大多数人认为它们就是个娱乐设备,在我看来它们同样可以帮助我们更加快捷的工作,我用手机遥控单反.用手机控制PPT的播放. ...

  3. TCP/IP之大明王朝邮差

    一位大神的精华之作,原创2016-05-12 刘欣 来自码农翻身! 时间: 大明王朝天启四年, 清晨. 天色刚蒙蒙亮,我就赶着装满货物的马车来到了南城门,这里是集中处理货物的地方,一队一队的马车都来到 ...

  4. C#多线程案例基础

    C#多线程案例基础(转) 在学习多线程之前,我们先来看几个概念: 1,什么是进程?    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,当然一个程序也可能开 ...

  5. CDbConnectionExt.php 23.2实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置

      <?php   /** * 实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置. * 具体使用主数据库还是从数据库,使用如下规则: * 1.CDbComm ...

  6. windows服务访问网络资源(局域网内共享的文件夹)

    参考: 1.http://www.cnblogs.com/jak-black/articles/windows.html 2.http://q.cnblogs.com/q/25391/ 网络映射 1. ...

  7. CentOS6.5安装readline时报错:/usr/bin/ld : cannot find -lncurses

    CentOS6.5安装readline时报错:/usr/bin/ld : cannot find -lncurses 解决方法: 安装ncurses-devel,输入命令: #yum install ...

  8. jquery中选择ID以什么字符开头的匹配主要用于多个上传控件的时候,id无法使用,而且class不起作用的时候

    $("[id^=remark]")选择ID以remark开头的所有数据进行匹配

  9. 网络流量监控工具iftop

    #-------------------网络流量监控工具iftop---------------##! /bin/sh #1.首先安装依赖关系包yum install flex byacc libpc ...

  10. Show Roles Assigned to a Specific User

     Here is a query that I often use to lookup Roles assigned to a specific PeopleSoft user. At run tim ...