(Object-C)学习笔记(三) --OC的内存管理、封装、继承和多态

OC的内存管理

  iOS7以前使用的是MRC手动内存管理,现在都使用ARC自动内存管理,一般不会出现内存泄漏问题。

封装

  封装就是有选择的保护自己的代码。将给别人使用的接口留出来让人看见,其他的都隐藏起来。增加了代码的可读性、可维护性、可拓展性。

  将给别人看的代码放在 interface当中(.h or .m),不让看的放在implementation当中。这就是封装对象。

继承

  子类可以继承父类非私有的属性和方法。

继承的优点:1.代码复用 2.制定规则 3.为了多态

继承的缺点:1.提高了代码的复杂性,维护性和复杂性降低 2.破坏了类的封装性 (老师说如果不是为了多态一般少用继承)

例子:

TRAnimal.h

1 #import <Foundation/Foundation.h>
2
3 @interface TRAnimal : NSObject
4 @property NSString *name;
5 @property int age;
6 -(id)initWithName:(NSString*)name andAge:(int)age;
7 -(void)eat;
8 -(void)sleep;
9 @end
TRAnimal.m
 1 #import "TRAnimal.h"
 2
 3 @implementation TRAnimal
 4 -(id)initWithName:(NSString *)name andAge:(int)age
 5 {
 6     if (self = [super init])
 7     {
 8         self.name = name;
 9         self.age = age;
10     }
11     return self;
12 }
13 -(void)eat
14 {
15     NSLog(@"动物%@吃", self.name);
16 }
17 -(void)sleep
18 {
19     NSLog(@"动物%@睡", self.name);
20 }
21 @end
TRDog.h
1 #import "TRAnimal.h"
2
3 @interface TRDog : TRAnimal
4 @property int weight;
5 -(id)initWithName:(NSString *)name andAge:(int)age andWeight:(int)weight;
6 -(void)watchHome;
7 @end
TRDog.m
 1 #import "TRDog.h"
 2
 3 @implementation TRDog
 4 -(id)initWithName:(NSString *)name andAge:(int)age andWeight:(int)weight
 5 {
 6     if (self = [super initWithName:name andAge:age])
 7     {
 8         self.weight = weight;
 9     }
10     return self;
11 }
12 -(void)watchHome
13 {
14     NSLog(@"狗狗%@正在看家", self.name);
15 }
16 -(void)eat
17 {
18     [super eat];
19     NSLog(@"狗狗%@在啃骨头", self.name);
20 }
21 @end
在狗类里我重写了eat方法,并且添加了watchHome方法。

方法的重写:

  子类满足与父类的方法名相同、参数类型相同、返回值相同就是重写父类的方法。如果重写了父类方法就优先调用子类的方法,否则调用父类的方法。

多态

  多态就是父类使用子类的构造方法。详细请看:http://www.cnblogs.com/wendingding/p/3705428.html

  

时间: 2024-08-01 10:32:24

(Object-C)学习笔记(三) --OC的内存管理、封装、继承和多态的相关文章

《objective-c基础教程》学习笔记(十)—— 内存管理之对象生命周期

本篇博文,将给大家介绍下再Objective-C中如何使用内存管理.一个程序运行的时候,如果不及时的释放没有用的空间内存.那么,程序会越来越臃肿,内存占用量会不断升高.我们在使用的时候,就会感觉很卡,最终使得程序运行奔溃.因此,将无效的内存及时清理释放,是非常有必要的. 一个对象在最初创建使用,到最后的回收释放,经历的是怎样一个过程呢?包括:诞生(通过alloc或new方法实现).生存(接收消息并执行操作).交友(通过复合以及向方法传递参数).最终死去(被释放掉). 一.引用计数 在对象创建的时

分布式memcached学习(三)&mdash;&mdash;memcached内存管理机制

  几个重要概念 Slab memcached通过slab机制进行内存的分配和回收,slab是一个内存块,它是memcached一次申请内存的最小单位,.在启动memcached的时候一般会使用参数-m指定其可用内存,但是并不是在启动的那一刻所有的内存就全部分配出去了,只有在需要的时候才会去申请,而且每次申请一定是一个slab.Slab的大小固定为1MB(1MB=1024KB=1024×1024B=1048576B,1048576字节),一个slab由若干个大小相等的chunk组成. Slab的

学习笔记 三: 用systemd管理服务

一 systemd基本知识 提高启动速度 自动服务依赖管理 systemd基本管理unit Service unit   .service A system service. Target unit    .target A group of systemd units. Automount unit .automount A file system automount point. Device unit    .device A device file recognized by the k

【Node.js学习笔记三】什么是Node封装模块?(Node Packaged Module.module)

Node封装模块是一个打包的库,它可以很容易的在不同的项目中被共享.重用和安装. 有很多可用于多种用途的不同模块. 例如: Mongoose模块为MongoDB提供了一个ODM Express扩展了Node的HTTP功能 Node.js模块由不同的第三方机构创建,提供现有Node.js所缺乏的重要功能. 每个Node封装模块包含一个 package.json文件,该文件包含元素数据信息,如: 名称 版本 作者 贡献者 以及控制元数据,比如依赖和执行诸如安装与发布动作时,Node包管理器将使用的其

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

Android-Universal-Image-Loader学习笔记(3)--内存缓存

前面的两篇博客写了文件缓存,现在说说Android-Universal-Image-Loader的内存缓存,该内存缓存涉及到的类如图所示 这些类的继承关系如下图所示: 如同文件缓存一样,内存缓存涉及的接口也有两个:MemoryCacheAware 和MemoryCache,其中MemoryCache只是简单的继承了MemoryCacheAware并没有声明其他的方法.MemoryCacheAware接口的方法如下: @Deprecated public interface MemoryCache

加壳学习笔记(三)-简单的脱壳思路&amp;调试思路

首先一些windows的常用API: GetWindowTextA:以ASCII的形式的输入框 GetWindowTextW:以Unicaode宽字符的输入框 GetDlgItemTextA:以ASCII的形式的输入框 GetDlgItemTextW:以Unicaode宽字符的输入框 这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目.还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

Object C学习笔记25-文件管理(一)

在此篇文章中简单记录一下文件管理,在Object C中NSFileManager用于管理文件已经路径.在Object C中的文件路径可以是相对路径也可以是绝对路径.斜线"/"开头,斜线实际上就是一个目录,称为 根目录.字符(-)用作用户主目录的缩写.点" . "表示当前目录,两点"  .. "表示父目录. 一. 创建NSFileManager 对象 NSFileManager非常简单,可以使用如下方式来创建NSFileManager对象. NSS