【Objective-C学习记录】第二十一天

温故而知新,继续复习。

OC中可以通过声明属性来省略setter和getter,达到让代码简洁的目的。使用属性时,不需要在接口和m文件中进行实例变量的声明和setter getter的实现,系统会自动提供这些,但是如果在接口部分自定义了实例变量,那么将以自定义的为准,系统不会生成实例变量。

语法:采用@property关键字,并且@property不是变量,是方法。

命名:属性名不加下划线,只有实例变量才有下划线。

属性是一对setter和getter方法,属性类型是setter方法中的参数类型,是getter方法中的返回值类型。

特性:

1.读写性(readonly,readwrite,setter =,getter =)

readonly:只读状态,通知编译器,属性只生成getter方法,不生成setter方法。

readwrite:读写状态,通知编译器,属性既生成setter方法,也生成getter方法。

setter =/getter =:方法重命名。setter = set://getter = get:。

2.原子性(atomic,nonatomic)

atomic:原子性。默认修饰符,保证了实例变量在多线程情况下访问是安全的,  通过不断加锁解锁实现在同一时刻实例变量只能被一个线程访问。但是不断的加锁解锁会消耗大量的CPU性能。

nonatomic:非原子性。与atomic相反。

3.语义(assign,retain,copy)

语义不同,直接决定了属性对应的setter,getter方法内部实现的不同。

assign:修饰的属性是非对象类型,并且assign是默认的语义特性。

retain:所有对象类型的属性,都可以用retain来修饰。

copy:也是用来修饰对象类型的属性,但是一定要保证代表属性类型的这个类必须接收了NSCopying,而且实现了copyWithZone:方法。字符串通常用copy来修饰。

语义特性涉及到了OC里内存管理的知识。先上代码:

 1 @synthesize height = _height;
 2 - (void)setHeight:(CGFloat)height
 3 {
 4     _height = height;
 5 }
 6 - (CGFloat)height
 7 {
 8     return _height;
 9 }
10 @synthesize school = _school;
11 - (void)setSchool:(NSString *)school
12 {
13     if (_school != school)
14     {
15         [_school release];
16         _school = [school retain];
17     }
18 }
19 - (NSString *)school
20 {
21     return [[_school retain] autorelease];
22 }
23 @synthesize major = _major;
24 - (void)setMajor:(NSString *)major
25 {
26     if (_major != major)
27     {
28         [_major release];
29         _major = [major copy];
30     }
31 }
32 - (NSString *)major
33 {
34     return [[_major retain] autorelease];
35 }

可以发现school属性和major属性与平时看到的setter和getter方法不一样,这是因为school和major是NSString类型,即对象类型,所以用retain或者copy语义修饰,因此需要这样去写,具体的内存管理知识在后面详细记录。

另外需要注意的是,如果没有@synthensize对属性的实现,还重写了setter和getter方法,那么就不会生成相对应的实例变量。换句话,如果重写了setter和getter,必须用@synthensize实现属性,这样才能生成实例变量。

点语法

如果接触过其他的OOP语言,对这个点语法应该很熟悉,点语法就是属性的另一种调用方式,前面一直用getter去访问属性,其实可以直接通过对象名.属性名的方式来访问。

时间: 2024-10-08 21:30:29

【Objective-C学习记录】第二十一天的相关文章

Objective-C 学习记录4

字符串的一些方法使用: 1.创建字典的NSString可变字符串,和NSMutableString不可变字符串.都是objective的对象. char *str是字母数组. 2.字符串格式化:stringWithFormat,,格式化任何int,char double,float等的内型. 3.stringWithString字符串赋值和这个类似, NSString *str = @"我就是我!"; 4.字符串转化为UTF-8的格式 stringWithUTF8String 5.两个

Objc基础学习记录3

在学习Objective-c中, 数组 1.NSArray, 这是一个不可变的数组,不能修改和删除其中的对象,可以存储任意objective的对象指针. 不能存储int,char类型的,,需要转换为需要的类型. 要快速枚举数组中的值,用in. 1 for (NSString *eleement in myArray) 2 NSLog(@"myArray is %@",element); 2.NSMutableArray 这是一个可变的数组,可以向其中添加和删除对象. a.添加addOb

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录<二>

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录<三>

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

Python学习记录-2016-11-29

今日学习记录: 心灵鸡汤: 要有合适自己的目标,一个目标一个目标实现,切忌好高骛远: 最好的投资就是投资自己: 实现梦想 学习,学习,再学习: Talk is cheap. 从本身而言,余三十而立之年,从事测试行业7七年有余,一年半华为外包路由器,两年无线wifi测试,一年半网管软件测试,一年自动化测试经理,推行公司自动化测试进程,从开始的TCL,到现在的python,工欲善其事必先利其器,所以自己来学习,总体我认为我的目标是一直前进的,不断变化的,但是方向并没有大的错误,有些累,所以近期有些懈

程序的机械级表示学习记录

程序的机械级表示学习记录 X86的三代寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全. 8086的分段模式. IA32的带保护模式的平坦模式. 对于机械级编程的两种重要抽象 ISA:机械级程序的格式和行为,定义为指令集体系结构,它定义了处理器状态.指令的格式,以及每条指令对状态的影响. 虚拟地址:机器级程序使用的存储器地址,提供的存储器模型看上去是一个非常大的数组.存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来的. 在GCC中获得汇编代码与反汇编 获得汇编代码:

python 系统地学习记录

由头: python值得一学. 尝试一下写学习记录,看看效果. 1.记录一些不熟悉或者重要的知识点. 2.记录一些遇到的问题,标签 Question. 书:python基础教程(第2版) Chapter 1:基础知识 本章的内容熟悉即可. 比较重要的是字符串,单双引号转义,str,repr... Time 1.5 h  2015.8.31 23:09 版权声明:本文为博主原创文章,未经博主允许不得转载.