Object-C 基础笔记3---属性
一,区别属性和实例变量
实例变量就是声明在接口大括号里面的变量.@public类型的实例变量直接使用->访问,
property 属性是一组设置器和访问器,属性是方法不是变量.
与类相似,属性需要声明和实现,声明在.h文件里,
@property int age;相当于:
-(void)setAge:(int)age;
-(int)age;
属性的实现:
@synthesize age=_age;//=后面给出要赋值或取值的实例变量
相当于实现了两个方法:
-(void)setAge:(int)age
{_age=age;}
-(int)age
{
return _age;
}
属性也可以设置特性,主要包括三个方面:
1,读写特性:readwrite读写属性,默认 readonly 只读属性相当于设置了getter方法,没有setter.
getter=name,setter=name设置方法名,制定getter和setter名.
2,原子性特性:atomic nonatomic 原子性和非原子性.
3,语义特性:语义属性可以通过以下关键字设置:
assign 直接赋值 适用于基本数据类型(不带*的成员变量或属性)
retain 赋值时做内存优化 适用于对象类型(带*的变量)
copy 复制一个副本 适用于特殊的对象类型(实现NSCoping协议的才能写copy);进入NSString里面会发现@interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>,这里的NSString实现了NSCopying.
点语法
一旦我们有了实例变量的设置器和访问器,就可以使用oc点语法
比如:p.age=20;等价于[p setAge:20]; 对象.属性名
如果是int a=p.age就是调用了getter方法,等价于int a=[p age];
小结
属性是一组方法,实例变量是变量.两者不同.
定义属性@property 和@synthesize. @synthesize age;等价于@synthesize age=age;
基本数据类型使用assign,对象类型使用retain,实现了NSCopying协议的对象使用copy.
- (void)setName:(NSString *)name//基本数据类型
{
_name = name;
}
- (void)setName:(NSString *)name//实现了NSCopying协议的对象使用copy 也可以使用retain,一般都使用retain
{
if (_name != name) {
[_name release];
_name = [name copy];
}
}
- (void)setName:(NSString *)name//对象类型使用retain
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
点语法和[receiver message]是等价的.
@property(retain)NSString *name;等价于
- (void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
_name = [name retain];
}
}
如果对象还是原来的对象就不做处理,如果setter里给的值不是原来有的值,就把原来的release掉,然后 在retain一下赋给_name
封装
封装:隐藏内部实现,提供接口调用. (就是把对象的状态和行为绑到一起的机制,使对象成为独立整体,并隐藏内部细节)
属性封装了实例变量
方法封装了具体实现代码
类封装了属性和方法
Object-C 基础笔记3---属性的更多相关文章
- Object C学习笔记10-静态方法和静态属性
在.NET中我们静态使用的关键字static有着举足轻重的作用,static 方法可以不用实例化类实例就可以直接调用,static 属性也是如此.在Object C中也存在static关键字,今天的学 ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- C#基础笔记(第十天)
C#基础笔记(第十天) 1.字段.属性.方法.构造函数字段:存储数据属性:保护字段,对字段的取值和设值进行限定方法:描述对象的行为构造函数:初始化对象(给对象的每个属性依次的赋值)类中成员,如果不加访 ...
- JavaScript基础笔记集合(转)
JavaScript基础笔记集合 JavaScript基础笔记集合 js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译 js存放的位置 html脚本必须放在&l ...
- JavaScript基础——JavaScript语法基础(笔记)
JavaScript语法基础(笔记) 1.语言编码 JavaScript语言建立在Unicode字符集基础之上,因此脚本中,用户可以使用双字节的字符命名常量.变量或函数等. [示例] var 我=&q ...
- Object C学习笔记24-关键字总结
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- Object C学习笔记17-动态判断和选择器
当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...
- MYSQL基础笔记(三)-表操作基础
数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
随机推荐
- iOS 常见 Crash 及解决方案
一.访问了一个已经被释放的对象 在不使用 ARC 的时候,内存要自己管理,这时重复或过早释放都有可能导致 Crash. 例子 NSObject * aObj = [[NSObject alloc] i ...
- Java 线程综述
线程重在 线程同步和线程通信的编程 1.线程与进程? 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.线程的状态:运行.就绪.挂起(suspend).结束; 进程是指一段正在执行的程序. ...
- uva 1631
1631 Locker A password locker with N digits, each digit can be rotated to 0-9 circularly. You can ro ...
- [转]BeginInvoke和EndInvoke方法浅析
开发语言:C#3.0 IDE:Visual Studio 2008 一.C#线程概述 在操作系统中一个进程至少要包含一个线程,然后,在某些时候需要在同一个进程中同时执行多项任务,或是为了提 ...
- qml 相关的博客
http://qt-project.org/wiki/SpaceAppsChallengeResources http://www.ics.com/blog https://www.ics.com/d ...
- Qml一些技巧
1.从ListView中获取当前选中项 myList.currentItem.children[0].text 可以获取ListView的选择项的一个个元素.注意children的使用.
- mysql的REGEXP 和like的详细研究和解释
1 regexp ^ 匹配字符串的开始部分 $ 匹配字符串的结束部分 . 匹配任何字符(包括回车和新行) a* 匹配0或多个a字符的任何序列 a+ 匹配1个或多个a字符的任何序列 a? 匹配0个或1个 ...
- 从问题域出发认识Hadoop生态系统
近些年来Hadoop生态系统发展迅猛,它本身包含的软件越来越多,同时带动了周边系统的繁荣发展.尤其是在分布式计算这一领域,系统繁多纷杂,时不时冒出一个系统,号称自己比MapReduce或者Hive高效 ...
- 用PDB库调试Python程序
Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的. 用pdb调试有多种方式可选: 1. 命令行启动目标程序,加上-m参数,这样调用my ...
- for循环往Oracle中插入n条数据,主键自增
1.主键自增实现方法:http://www.cnblogs.com/Donnnnnn/p/5959871.html 2.for循环往Oracle中插入n条数据 BEGIN .. loop insert ...