objective-C学习笔记(五)函数成员:初始化器和析构器
初始化器:init
对象初始化器: -(id)init 可以重载多个。
类型初始化器: +(id)initialize只能有一个。
对象初始化器:
初始化对象实例时,init通常和alloc(手动内存分配)搭配使用。
alloc所做的事情——NSObject已实现。
·在堆上分配合适大小的内存。
·将属性或者实例变量的内存置0。
init所做的事情——可以自定义:
·调用父类初始化器[super init](前置调用)
·初始化当前对象的实例变量(注意是实例变量,不是属性)
new 相当于调用alloc/init的无参数版本。
·Book* book = [Book new];
类初始化器:一般用的很少
比如说类里有一个全局的静态变量,就需要在类初始化的时候赋个初值。
initialize在每个类使用之前被系统自动调用,且只调用一次(每个进程周期)。
子类的initialize会自动调用父类的initialize(前置调用)。
析构器:dealloc (也叫释放器)
释放对象所拥有的资源,无返回值的函数。
只有对象析构器,没有类型析构器。
自动实现:1.ARC将对象属性引用计数减持。
手动实现:2. 释放不受ARC管理的动态内存,如malloc分配的内存。
手动实现:3. 关闭非内存资源,如文件句柄,网络接口。。。
dealloc由ARC根据对象引用计数规则,在释放对象内存前自动调用,无法手动调用。
子类的dealloc会自动调用父类的dealloc(后置调用)。
objective-C学习笔记(五)函数成员:初始化器和析构器的更多相关文章
- Go语言学习笔记(五) [函数]
日期:2014年7月29日 1.函数定义:func (p type) funcname(q int) (r,s int) {return 0,0 } func: 保留字,用于定义一个函数 ...
- Python学习笔记(五)函数和代码复用
函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...
- python学习笔记(五)---函数与类
函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...
- JS学习笔记 (五) 函数进阶
1.函数基础 1.1 函数的基本概念 函数是一段JavaScript代码,只被定义一次,但是可以被调用或者执行许多次.函数是一种对象,可以设置属性,或调用方法. 函数中的参数分为实参和形参.其中,形参 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- C++基础 学习笔记五:重载之运算符重载
C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- AngularJS学习笔记2——AngularJS的初始化
本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过程: <!doctyp ...
随机推荐
- 玉兔IM(康林的博客)
玉兔即时通信 作者:康林(msn.email:kl222@126.com:QQ:16614119) 博客:http://blog.csdn.net/kl222http://blog.csdn.net/ ...
- poj2163
#include <stdio.h> #include <stdlib.h> int main() { ; ]; scanf("%d %d %d",& ...
- libVirt APIs uris (storage,hypervisors)drivers terminologies,glossary xml VMI format
- 剑指offer 27二叉搜索树与双向链表
class Solution { public: void ConvertNode(TreeNode* pRootOfTree,TreeNode** pre) { if(pRootOfTree) { ...
- log file sync等待超高一例
这是3月份某客户的情况,原因是server硬件故障后进行更换之后,业务翻译偶尔出现提交缓慢的情况.我们先来看下awr的情况. 我们能够看到,该系统的load profile信息事实上并不高,每秒才21 ...
- C++中#include <xxx.h>和#include "xxx.h"的区别(尖括号和双引号的区别)
第一种方式:采用< >方式,表示让编译器在编译器的预设标准路径下去搜索相应的头文件,如果找不到则报错. 例如:VS2015的安装目录\Microsoft Visual Studio 14. ...
- 桦仔 笔记7-徐 SQLSERVER日志记录机制
1 --SQLSERVER日志记录机制 2 --日志记录事务发生的时间,但是不保证记录下发起这个事务的用户名,更不记录发起者的程序名称!!! 3 USE AdventureWorks 4 CREATE ...
- ##DAY11 UITableView编辑
##DAY11 UITableView编辑 每一个视图控制器都有一个编辑按钮,因为项目中编辑的应用场景非常多,所以系统预留了一个编辑按钮供我们使用 self.navigationItem.leftBa ...
- Java socket字节流传输的示例
服务端server端: package com.yuan.socket; import java.io.*; import java.net.ServerSocket; import java.net ...
- 树莓派高级GPIO库,wiringpi2 for python使用笔记(二)高精度计时、延时函数
学过单片机的同学应该清楚,我们在编写传感器驱动时,需要用到高精度的定时器.延时等功能,wiringpi提供了一组函数来实现这些功能,这些函数分别是: micros() #返回当前的微秒数,这个数在调用 ...