目录:

一、IOS6声明式属性的使用

二、autoreleasepool自动释放池

三、封装、继承

回到顶部

一、IOS6声明式属性的使用

注:声明式属性默认情况下,并没有解决内存问题,

当使用@property(retain)声明对象类型属性时,可以解决setter中内存问题,(release旧值,retain新值),在dealloc中要release掉最后的那个retain。

1 语法格式

@property(参数1,参数2)引用类型* 变量名;

一般这么来写:@property(nonatomic,retain)TRStudent* stu;

2 参数2

*retain解决属性是对象的内存问题。

*assign默认类型,setter方法直接赋值,而不进行retain操作

*copy一些特殊对象类型,如果不希望和别人共享一个对象,用copy会自动创建一个新的对象。NSString必须用copy。NSString是只读的。而其他所有的对象用retain。

*readonly只读,去掉setter方法,只保留getter。

*readwrite可读可写,默认

retain和copy的区别

retain相当于引用复制

copy相当于内容复制

3 参数1

nonatomic 非原子性操作,安全性差,效率高,在ios开发中一般使用nonatomic。

atomic原子性操作,在多线程使用的时候,一般来防止写未完成的时候,被另一个线程读取,造成数据安全性问题。这中操作是耗费资源的。

练习:有一台电脑TRComputer,能干什么playGame,显示cpu信息,内存(mem)信息,TRCpu类(运行频率hz x G),TRMem类(容量size x G),

第一次玩游戏 cs

cpu: AMD 1G hz

mem:KingMaz 2G size

第二次玩游戏 战地4

cpu: Intel 2G hz

mem:三星 8G size

1 创建类、对象

2 给类添加属性、初始化方法、工厂方法

3 声明式属性方法,解决内存问题

回到顶部

二、autoreleasepool自动释放池

1 池特点:节约空间、节约资源、共享

2 通过自动释放池来管理对象,只需要一个自动释放池,可以管理很多对象,当自动施法池结束的时候,会自动向池中的每个对象都发送release消息。

3 自动释放池是可以嵌套的,会先释放里面的,在释放外面的

4 工厂方法在使用时通常发送autorelease消息。

回到顶部

三、封装、继承

1 封装

封装属性和方法都放在一个对象,只给外界公开访问的接口,把具体实现隐藏,其主要目的:可读性、可维护性、可扩展性。

在OC中把需要公开的属性、方法定义在声明.h文件中interface部分,而把不需要公开的属性、方法定义在.m文件中implementation部分,隐藏起来。

封装的好处:

·代码的结构更清晰

·可以和第三方合作,但又保护了源代码,避免泄露。

2 OC中实例变量的处理,一般情况下,实例变量是不能公开的,所有实例变量应该定义在implementation部分(私有),除非需要直接在子类中访问,可定义在interface部分,可以使用以下语法声明实例变量,来控制实例变量的访问范围。

变量的访问范围:

@public 公开,可以类外方位

@package 包,可以在包内访问,一个项目一定是在同一个包下

@protected 受保护的,可以在本类内部和子类内部访问

@private 私有的,只可以在本类的内部访问

注:默认实例变量默认修饰符是@protected,

在mian函数中实例对象可以通过->访问实例变量,但不推荐,一般通过.语法来访问实例变量

3 封装中的方法

*如果.h文件中,未声明方法,此方法就是私有方法,在其他文件中访问该方法是不合法的

*如果.h文件中,声明方法,此方法就是公有方法,在其他文件中可以访问该方法

4 继承

继承是一种代码复用技术,是类与类之间的一种关系。

A类继承B类,A类中就直接拥有B类中的属性和方法。我们把A类叫B类的子类,把B类叫A类的父类(基类)

继承方式

单继承:一个类只能继承一个父类。OC Java C#

多继承:一个类可以有多个父类。C++

继承的语法

@interface 类:父类(NSObject)

@end

继承是类与类的关系,是一种"is a"关系

子类对父类继承的方法不满意,可以在子类重写父类的方法,

(覆盖)重写的原则:

·方法名相同

·参数类型相同

·返回类型相同

如果重写父类的方法,优先调用子类的方法,如果子类没有重写父类的方法,则调用父类的方法。

练习:

1)父类Animal,有一个方法叫shout的方法,父类默认该方法输出"动物叫",创建两个子类Cat,Dog,Cat类没有重写父类的方法,而Dog重写父类的方法,改成自己的叫声"汪汪汪"

2)写出以下类,用最少的代码解决问题,

TRShape形状类

TRRectangle矩形类x,y

TRCircle圆形r

TRSquare正方形x

求:周长perimeter与面积area,show方法,查看周长和面积。属性、初始化方法、工厂方法、内存管理、继承。

//www.ceiaec.org信息技术

04-OC属性的使用、自动释放池、封装和继承的更多相关文章

  1. OC之property和自动释放池

    property实例 property参数 自动释放池 一.property实例 1.前边的例子我们看到,我们在一个类中如果用到另外一个类的实例作为自己的成员变量时,通常需要在setter方法中,先r ...

  2. OC中对象元素的引用计数 自动释放池的相关概念

    OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc]  view plaincopy 1. //   2. / ...

  3. OC对象,自动释放池,OC与C语言的区别

    在C语言中,编程都是面向过程的编程,每一个代码块都严格按照从上至下的顺序执行,在代码块之间同样也是这样, 但是在OC中往往不是这样,OC和C++.java等语言一样,都是面向对象的编程语言,在代码的执 ...

  4. C++模拟OC的多重自动释放池

    使用过OC的都知道,OC的引用计数机制用起来还比较方便.于是就仿照OC的形式搞了个C++引用计数. 支持多重自动释放池,每次autorelease都会放到栈顶的自动释放池中. 自动释放池也可以像变量一 ...

  5. 63 (OC)* NSAutoreleasePool 自动释放池

    目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...

  6. OC学习篇之---数组对象的引用计数问题和自动释放池的概念

    之前一片文章中我们介绍了OC中的两个关键字@property和@synthesize的使用的使用: http://blog.csdn.net/jiangwei0910410003/article/de ...

  7. OC 内存泄露 自动释放池

    花絮:看到下面的代码就想起这么一个调侃: 一个老程序员,功成名就,金盆洗手不在写代码后,决定练练书法.提笔思索良久后在纸上写下:Hello world! /********************** ...

  8. OC自动释放池autoreleasepool介绍

    自动释放池的机制是:它使得应用在创建新对象时,系统能够有效地管理应用所使用的内存. @autoreleasepool { statements } 在创建新对象时,并且系统未启动ARC特性,那么在使用 ...

  9. OC_内存管理(二)对象复制、循环引用问题、自动释放池

      循环调用: 1.循环引用的问题 两个对象A.B,有可能会出现特殊情况:A中包含B的实例变量:B中也包含A的实例变量,如果这两个实例变量都是强引用(A有着B的实例变量所有权,B也有A的实例变量所有权 ...

随机推荐

  1. Linux通过网卡驱动程序和版本号的信息

    检查卡制造商和信号 查看基本信息:lspci 查看详情:lspci -vvv   # 3小作文v 查看卡信息:lspci | grep Ethernet 查看网卡驱动 查看网卡驱动信息:lspci - ...

  2. SVN使用技巧

    安装 下载SVN服务端:VisualSVN Server https://www.visualsvn.com/downloads/ 安装,下一步...(更改地址,Location是安装目录,Repos ...

  3. DevExpress ASP.NET 使用经验谈(2)-XPO对象的使用(使用默认数据连接)

    接下来,我们通过一个控制台应用程序,介绍XPO对象的保存操作. 图一 添加新项目 图二 选择项目类型为控制台应用程序 查看生成的Program.cs代码文件,代码如下: using System; u ...

  4. vmware能够ping通内网,上不了外网的解决方法

    一般这是由于里面的路由域名服务器没有配置好. issta@ubuntu:~$ ping www.baidu.com ping: unknown host www.baidu.com 先看一下地址解析器 ...

  5. 模仿jquery的一些实现 第二版

    具体如下: //w作为window的形参,就表示window (function(w) { // 定义一个全局的window.wyl变量,就类似于jquery里的$,Jquery对象 w.wyl; / ...

  6. 我的Python成长之路---第六天---Python基础(20)---2016年2月20日(晴)

    一.面向对象基础 面向对象名词解释: 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公 ...

  7. Ubuntu下配置修改IP地址

    一.使用命令设置Ubuntu IP地址 1.修改配置文件blacklist.conf禁用IPV6:sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 bl ...

  8. 转:.Net程序员学习Linux最简单的方法

    有很多关于Linux的书籍,博客.大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步.未入其门就路过了. 所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语 ...

  9. 将 Java Spring Framework 应用程序迁移到 Windows Azure

    我们刚刚发布了一个新教程和示例代码,以阐述如何在Windows Azure中使用 Java 相关技术.在该指南中,我们提供了分步教程,说明如何将 Java Spring Framework 应用程序( ...

  10. BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她 ...