第6条: 理解“属性”这一概念

通过对象来存储并传递数据,

在对象之间传递数据并执行任务的过程称为“消息传递”

OC对象会把其所需要的数据保存为实例变量并通过“存取方法”来访问。这称为属性

@dynamic

  告诉编译器:不要自动创建实现属性所用的实例变量,也不要为其创建存取方法。这样在编译时虽然发现没有定义存取方法也不会报错,相信在运行期能找到。

  例:CoreData 框架中的NSManagedObject类的子类时,用了这个关键字,说明数据是在运行时创建存取方法的。

属性特质:4类

  原子性:nonatomic,非原子的, 不使用同步锁。这并不能保存线程安全。

  非原子性:使用同步锁开销较大,所以iOS程序几乎不用。但在Mac OS X程序时,对性能没什么影响。

  读写、只读:readwrite, readonly(没有setter方法)

  内存管理语义:

    assign, strong(先保留新值,并释放旧值,再赋新值), weak(既不保留新值,也不翻放旧值,类似assign,安全), unsafe_unretained(类似assign,与weak的区别:不安全), copy(与strong类似,避免可变发生,例如:字符串NSString,因为值可能来自子类NSMutableString,可能被更改,所以用copy)

  

方法名设置别名:例:@property(nonatomic, getter = isOn) BOOL on;

在设置属性所对应的实例变量时,一定要遵从该属性所声明的语义

  例: init方法中

    -(id)initWithFirstName:(NSString*)firstName lastName:(NSString*)lastName {

      if(self = [super init]) {

        _firstName = [firstName copy];

        _lastName = [lastName copy];

      }

      return self;

    }

  

时间: 2024-10-11 21:35:07

第6条: 理解“属性”这一概念的相关文章

第6条:理解“属性”这一概念(中)

属性特质: 使用属性时还有一个问题要注意,就是其各种特质(attribute)设定也会影响编译器所生成的存取方法.比如下面这个属性就指定了三项特质: 1 @property (nonatomic, readwrite, copy) NSString *testFirstName; 属性可以拥有的特质分为四类: 原子性 在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicity)(在并发编程中,如果某操作具备整体性,也就是说,系统其他部分无法观察到其中间步骤所生成的临时结果,

Effective Objective-C 2.0 — 第二章 对象、消息、运行期 - 第六条:理解“属性”这一概念

开发者通过对象来 存储并传递数据. 在对象之间传递数据并执行任务的过程就叫做“消息传递”. 这两条特性的工作原理? Objective-C运行期环境(Objective-C runtime) ,提供了使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑. 第六条:理解“属性”这一概念 property:

6、理解“属性”这一概念

要理解好"属性"这一概念,我觉得需要把以下几个问题弄明白: 1.实例变量与public.protected.private 2.实例变量的继承性 3.属性摆放的位置,比如声明文件.实现文件.匿名分类声明文件等 4.属性与实例变量的关系 5.使用属性还是使用实例变量 6.属性与setter.getter方法的关系,与点语法的关系 7.属性的4个属性特质:原子性.读/写权限.内存管理语义.方法名 笔者结合工作经验.书本信息.网络资源等,希望能够将这些内容尽量梳理清楚. (未完-待续,工作任

(第2章-对象、消息、运行期)第6条:理解“属性”这一概念

属性可以拥有的特质分为四类: 原子性 在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicty).如果属性具备nonatomic特质,则不使用同步锁.请注意,尽管没有名为“atomic”的特质(如果某属性不具备nonatomic特质,那它就是“原子的”(atomic)),但是仍然可以在属性特质中写明这一点,编译器不会报错.若是自己定义存取方法,那么就应该遵从与属性特质相符的原子性. 读/写权限 具备readwrite(读写)特质的属性拥有“获取方法“(getter)与“设置

编程的有效方法--深刻理解“属性这一概念”

1.简介 1>“属性”(property)是Objecive-C的一项特性,用于封装对象中的数据. 2>可以把属性当做一种简称,其意思是说:编译器会自动写出一套存取方法,用以访问给定类型中具有给定名称的变量,若不想令编译器自动合成存取方法,则可以自己实现.如果你只实现了其中一个存取方法,那么另外一个还是会由编译器来合成. 3> 还有一种办法能阻止编译器自动合成存取方法,就是使用@dynamic关键字,它会告诉编译器:不要自动创建实现属性所用的实例变量,也不要为其创建存取方法. 2.内存管

第37条:理解“块”这一概念

第6章 block 与 GCD 当前在开发应用程序时,每位程序员都应该留意多线程问题.你可能会说自己要开发的应用程序用不到多线程,即便如此,它也很可能是多线程的,因为系统框架通常会在 UI 线程之外再使用一些线程来执行任务.开发应用程序时,最糟糕的事情莫过于程序因 UI 线程阻塞而挂起了.在 Mac OS X 系统中,这将使鼠标指针一直呈现令人焦急的旋转彩球状:而在 iOS 系统中,阻塞过久的程序可能会终止执行. 所幸苹果公司以全新方式设计了多线程.当前多线程编程的核心就是 "块"(b

理解MySQL——架构与概念

理解MySQL——架构与概念 写在前面:最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很 多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了.但从5.0(2005年10月)开始,MySQL渐渐步入企业级数据库的 行列了:复制.集群.分区.分布式事务,这些企业级的特性,使得现在的MySQL,完全可以应用于企业级应用环境(很多互联网公司都用其作为数据库服务 器,尽管节约成本是一个因素,但是没有强大功能作后盾,则是不可想象的).虽然,MySQL还有很多不足,比

深入理解正则表达式环视的概念与用法

在<深入理解正则表达式高级教程-环视>中已经对环视做了简单的介绍,但是,可能还有一些读者比较迷惑,今天特意以专题的形式,深入探讨一下正则表达式的环视的概念与用法. 深入理解正则表达式环视的概念与用法 一.环视的概念 (一)环视概念与匹配过程示例 示例一:简单环视匹配过程 (二)什么是消耗正则的匹配字符? 示例二:一次匹配消耗匹配字符匹配过程 示例三:多次匹配消耗匹配字符匹配过程 二.环视的类型 (一)肯定和否定 (二)顺序和逆序 · 两种类型名称组合 · 四种组合的用法 四种组合正则与环视的摆

iOS开发OC基础:OC属性的一些概念和基本使用

一.属性简介 //属性是OC2.0之后新出的一种语法,能让我们快速的生成setter以及getter方法,大大简化代码 二.如何定义一个属性 //@property 属性关键字,用来定义属性 //NSString * 属性的类型 //name 属性的名字. //@property 只是生成的setter以及getter方法的声明.@property NSString *name; 三.属性的使用注意事项//如果在.m文件中我们自己实现了setter以及getter方法,则编译器就不会再帮我们生成