[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性

11.1 使用属性值

@property float rainHandling;
//表明此类具有float类型的属性,其名称为rainHandling

注意:属性的名称不必与实例变量名称同样。

@synthesize rainHandling;
//表示创建了该属性的訪问代码

注意:使用属性后,能够不声明实例变量。编译器会声明。

有两个地方能够加入实例变量声明:

  • 头文件:让子类直接通过属性訪问变量
  • 实现文件:变量仅仅属于当前类

点表达式:

  • 点表达式出如今(=)的左边:setter方法
  • 点表达式出如今(=)的右边:getter方法

注意:假设訪问属性提示訪问的对象不是struct类型,请检查当前类是否已包括了所需的必备头文件

11.2 属性扩展

属性同样适用于int,char。BOOL,struct类型,也能够定义一个NSRect对象的属性

保留死循环(retain cycle):Car对象拥有engine对象,可是engine对象不能反过来拥有Car对象。

copy特性

  • name存取方法:
- (void)setName: (NSString *)newName {
          [name release];
          name = [newName copy];
} // setName

- (NSString *)name {
          return (name);
} // name

等同于:

//name属性是copy特性
@property (copy) NSString *name;
@synthesize name;

retain特性

  • engine 的存取方法:

- (void) setEngine: (Engine *) newEngine{

          [newEngine retain];
          [engine release];
          engine = newEngine;

} // setEngine

- (Engine *) engine{
          return (engine);
} // engine

等同于:

//engine属性使用的是保留和释放特性
@property (retain) Engine *engine;
@synthesize engine;

noatomic特性:iOS程序常常使用的技术。资源有限的设备上获得更好的性能。

假设自定义了存取方法。那么必须使用nonatomic特性。

默认特性:假设没有为属性指定不论什么特性,它们会默认使用nonatomic和assign特性。

11.21 名称的使用

属性的名称一般与支持属性的实例变量名称同样。

有时程序猿希望实例变量是一个名称,而公开的属性是还有一个名称。

@property(copy)NSString *name;
@synthesize name = appellation;
// 编译器将创建-setName:和-name方法,但在实现代码中用的是appellation实例变量。

注意

直接訪问实例变量:self.name

使用訪问方法进行赋值:[self setName:@"Car"];

11.22 仅仅读属性

对于仅仅能读取,无法更改的值:

@property(readonly)float shoeSize;

注意:仅仅生成一个getter方法而不会生成setter方法

11.23 自己动手

@dynamic告诉编译器不要生成不论什么代码或创建对应的实例变量。

改变方法名:

使用getter=和setter=特性就能够自定义想要的方法名称

@property (getter=isHidden) BOOL hidden;
//告诉编译器生成名为isHidden的getter方法,并生成名为默认setHidden:的setter方法

注意:属性仅仅支持替代-setBlah和-blah方法,但不支持那些须要接收额外參数的方法

时间: 2024-10-15 04:55:23

[学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性的相关文章

Ajax本地跨域问题 Cross origin requests are only supported for HTTP(针对jQuery基础教程第四版第六章)

出现的问题: 解决的步骤: 谷歌浏览器出现的效果: 针对jQuery基础教程(第四版),第六章  成功: 原文地址:https://www.cnblogs.com/qinghui258/p/8432569.html

PHP 学习笔记(一):基础教程:语法,变量,函数,数组,超全局

PHP简介 PHP 脚本在服务器上执行. 什么是 PHP 文件 PHP 文件能够包含文本.HTML.CSS 以及 PHP 代码 PHP 代码在服务器上执行,而结果以纯文本返回浏览器 PHP 文件的后缀是 ".php" PHP能够做什么 PHP 能够生成动态页面内容 PHP 能够创建.打开.读取.写入.删除以及关闭服务器上的文件 PHP 能够接收表单数据 PHP 能够发送并取回 cookies PHP 能够添加.删除.修改数据库中的数据 PHP 能够限制用户访问网站中的某些页面 PHP

python基础学习笔记——Python基础教程(第2版 修订版)第一章

#模块 import math math.floor(9) from math import sqrt sqrt(9) #无需使用前缀 import cmath cmath.sqrt(-1) #不能使用from...inport #转义和单双引号 >>>"\"hello,word\"she said" '"hello,word"she said' #使用print不显示引号 #拼接字符串  + #输入 input raw_inp

python基础学习笔记——Python基础教程(第2版 修订版)第二章(列表和元祖)

#列表可修改,元祖不能 A=['sdsd',43] B=['sds',45] C=[A,B] #分片 : - #list函数 #分片赋值 #列表方法 lst.append(4) x.count(1) x.count([1,2]) a.extend(b) a.index("w") a.insert(3,"都")x.removex.reversex.sort #pop 移除列表元素,并返回值.实现数据结构-栈,LIFO(后进先出),x.append(x.pop()),先

笔记-Python基础教程(第二版)第一章

第一章 快速改造:基础知识 01:整除.乘方 (Python3.0之前 如2.7版本) >>> 1/2 ==>0 1/2整除,普通除法: 解决办法1: 1.0/2.0  ==>0.5 解决办法2:from _future_ import division 1/2  ==>0.5 // 表示整除 >>>1//2 ==>0 浮点数//浮点数,结果依然是整除结果 >>>1.0//2.0 ==>0.0 实际操作截图: ** 表示乘

jQuery基础教程(第四版)第4章练习:

关于答案: // (1) 修改样式表,一开始先隐藏页面内容,当页面加载后,慢慢地淡入内容:$(document).ready(function() { $('body').hide().fadeIn(4000);}) // (2) 在鼠标悬停到段落上面时,给段落应用黄色背景:$(document).ready(function() { $('p').mousemove(function(event) { //鼠标进入的时候 $(this).css('background','yellow');

jQuery基础教程(第四版)第3章练习:

关于答案: // // (1) 在Charles Dickens被单击时,给它应用 selected 样式.$(document).ready(function() { $('#header').on('click',function() { $('.author').addClass('selected') });}) // (2) 在双击章标题( <h3 class="chapter-title"> )时,切换章文本的可见性.$(document).ready(func

《Python基础教程 第2版&#183;修订版》 第2章 列表和元组(学习笔记&#183;总)

这章东西有点多,因此,分成了三份来写,总体来说,这章内容较基础,以下是一二三的链接 <Python基础教程 第2版·修订版>第2章 列表和元组(学习笔记·一) <Python基础教程 第2版·修订版>第2章 列表和元组(学习笔记·二) <Python基础教程 第2版·修订版>第2章 列表和原组 (学习笔记·三) 版权声明:本文为博主原创文章,未经博主允许不得转载.

《python基础教程(第二版)》学习笔记 字符串(第3章)

<python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:%左侧是格式字符串,右侧是需要格式化的值print '%s=%d' % ('x',100) ==> x=100%% 格式字符串中出现 %模板字符串:from string import Templates=Template('$x is 100');  s.substitute(x='ABC');  ==> '

《Python基础教程(第二版)》学习笔记 -&gt; 第九章 魔法方法、属性和迭代器

准备工作 >>> class NewStyle(object): more_code_here >>> class OldStyle: more_code_here 在这两个类中,NewStyle是新式的类,OldStyle是旧式的类,如果文件以__metaclass__ = type 开始,那么两个类都是新式类. 构造方法 构造方法,当一个对象被创建后,会立即调用构造方法.Python中创建一个构造方法,只要把init方法的名字从简单的init修改成__init__