一,区别属性和实例变量

实例变量就是声明在接口大括号里面的变量.@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---属性的更多相关文章

  1. Object C学习笔记10-静态方法和静态属性

    在.NET中我们静态使用的关键字static有着举足轻重的作用,static 方法可以不用实例化类实例就可以直接调用,static 属性也是如此.在Object C中也存在static关键字,今天的学 ...

  2. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  3. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  4. C#基础笔记(第十天)

    C#基础笔记(第十天) 1.字段.属性.方法.构造函数字段:存储数据属性:保护字段,对字段的取值和设值进行限定方法:描述对象的行为构造函数:初始化对象(给对象的每个属性依次的赋值)类中成员,如果不加访 ...

  5. JavaScript基础笔记集合(转)

    JavaScript基础笔记集合   JavaScript基础笔记集合   js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译   js存放的位置 html脚本必须放在&l ...

  6. JavaScript基础——JavaScript语法基础(笔记)

    JavaScript语法基础(笔记) 1.语言编码 JavaScript语言建立在Unicode字符集基础之上,因此脚本中,用户可以使用双字节的字符命名常量.变量或函数等. [示例] var 我=&q ...

  7. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  8. Object C学习笔记17-动态判断和选择器

    当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...

  9. MYSQL基础笔记(三)-表操作基础

    数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...

  10. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

随机推荐

  1. jsp基础知识(基本的语法及原理)

    jsp 语法分为三种不同的类型: (1) 编译器指令: 类如: <%@ page import="java.io.*"%> (2) 脚本语法: 指定的是java代码: ...

  2. hdu----(4301)Divide Chocolate(状态打表)

    多校综合排名前25名的学校请发送邮件到HDUACM@QQ.COM,告知转账信息(支付宝或者卡号) Divide Chocolate Time Limit: 2000/1000 MS (Java/Oth ...

  3. C++中颜色的设置

    1.改变整个控制台的颜色用 system("color 0A"); 其中color后面的0是背景色代号,A是前景色代号.各颜色代码如下: 0=黑色 1=蓝色 2=绿色 3=湖蓝色  ...

  4. F-Dining Cows(POJ 3671)

    Dining Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7584   Accepted: 3201 Descr ...

  5. 转载,javascript 设计模式

    了解JavaScript设计模式我们需要知道的一些必要知识点:(内容相对基础,高手请跳过) 闭包:关于闭包这个月在园子里有几篇不错的分享了,在这我也从最实际的地方出发,说说我的理解. 1.闭包最常用的 ...

  6. 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  7. Windows常用的DOS命令

    cleanmgr–打开磁盘清理工具compmgmt.msc---计算机管理conf—-启动 netmeetingcharmap–-启动字符映射表calc—-启动计算器chkdsk.exe–-Chkds ...

  8. [Js]瀑布流

    描述: 1.每个图片宽度都一样,高度不一样 思路: 1.算出一共有几列(通过视窗总宽度/单个图片宽度得出) 2.根据一共几列*单个图片宽度,设置外围总宽度并水平居中(注:这个宽度应该是计算出来的,而不 ...

  9. RelativeLayout练习

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  10. xcode6 ios launchimage

    1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image" 2.右侧的勾选可以让你选择是否要对ipad,横屏,竖屏,以及低版本的ios系 ...