alloc负责分配对象空间,init负责初始化对象。init是实例方法,返回的是初始化后的对象的地址。init是NSObject的初始化方法。
子类不实现init,会执行由NSObject定义的init,子类所有实例变量会初始化为0,NSString的值为nil。
子类实现的init方法不会对存取方法产生任何影响,仍然可以通过set方法修改实例变量。
出于优化考虑,init方法会释放已经分配了内存的对象,,然后创建另一个新对象并返回之。所以需要将父类的init方法所返回的对象赋值给self。为了避免init方法在执行过程中发生错误,释放对象并返回nil,所以需要检查父类的初始化方法的返回值,确定不是nil并且有效。
如果创建了带参数的init方法,为了避免其他人使用时用init来初始化,可以增加一个 init方法,调用自己写的方法:
-(id)init{
     return [self initWithProductName:@“Unknown"];
}
子类的初始化方法不需要为父类的属性赋值,因为父类的初始化方法会完成这些。创建子类时,通常只需要初始化新的实例变量。此外,也需要调用父类的初始化方法,初始化父类的实例变量。
任何一个类都有且只有一个初始化方法。如果某个类还有其他初始化方法,那么这些方法应该调用指定初始化方法。制定初始化方法是单一入口。
创建新类时,如果制定初始化方法名和父类不同,就需要在类的头文件中作出说明。
禁用init方法:
-(id)init {
     @throw [NSException exceptionWithName:@“WallSafeInitialization"
                                                                 reson:@“Use initWithSecretCode:,not init"
                                                             userInfo:nil];
}
 
本人入门不久,如果文章中有错误,欢迎大家批评指正。
版权归Fiona本人所有,如需转载请联系作者。

Init的更多相关文章

  1. Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V

    在学习CGlib动态代理时,遇到如下错误: Exception in thread "main" java.lang.NoSuchMethodError: org.objectwe ...

  2. git init和git init -bare区别

    1 Git init  和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...

  3. Linux根文件系统分析之init和busybox

    Hi,大家好!我是CrazyCatJack.今天给大家讲解Linux根文件系统的init进程和busybox的配置及编译. 先简单介绍一下,作为一个嵌入式系统,要想在硬件上正常使用的话.它的软件组成大 ...

  4. Android中的 init.rc文件简介

    init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(An ...

  5. linux-关机出现Telling INIT to go to single user mode.无法关机

    运行/sbin/shutdown now最后显示:Telling INIT to go to single user mode.INIT:Going single userINIT:Sending g ...

  6. 为什么不能在init和dealloc函数中使用accessor方法

    前言 为什么不要在init和dealloc方法中调用getter和setter:Apple在Mac与iOS中关于内存管理的开发文档中,有一节的题目为:"Don'tUse Accessor M ...

  7. MySQL 从 5.5 升级到 5.6,启动时报错 [ERROR] Plugin 'InnoDB' init function returned error

    MySQL 从 5.5 升级到 5.6,启动时报错: [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'Inn ...

  8. init shutdown reboot poweroff halt区别

    init 首先看看LINUX系统几种运行级别# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户 ...

  9. nginx-(/etc/init.d/nginx)启动脚本

    #!/bin/bash #nx Startup script for the Nginx HTTP Server # it is v. version. # chkconfig: - # descri ...

  10. 浅析 Linux 初始化 init 系统

    近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...

随机推荐

  1. SQL Developer新建连接

    1.打开SQL Developer,新建sys连接(sys为系统管理员拥有最高权限): 2.新建system连接(system为本地管理员,拥有次高权限): 3.新建scott(scott为普通用户, ...

  2. MVB设备分类

    连接在MVB上的设备按性能可以分为5类 MVB上的设备应具备下面六个性能中的一个或多个. MVB设备的性能 性能 说明 分类 设备状态 设备被轮询时能够发送出其设备状态 1,2,3,4,5 过程数据 ...

  3. stm8s103串口

    #include "uart.h" #define UART2#define uart_115200 1 void Init_UART2(void){#ifdef UART2    ...

  4. ES6中块作用域之于for语句是怎样的?

    在ES6中新加了快作用域的概念(C语言就有,作为类c语言的js,当然应该加上),算是很好理解. { let i; } console.log(i);// i is not defined 在代码块当中 ...

  5. sql 删除数据库所有用户表

    --变量@tablename保存表名 declare @tablename nvarchar() --将用户表全部保存到临时表#tablename中 SELECT [name] into #table ...

  6. Visor 隐藏应用之一 CSS3 生成器

    Visor 有很多隐藏功能,这些功能并不是系统的核心功能,只是为了测试一些技术,做了些对初学前端的工程师还算有用的功能.今天就介绍一下CSS3 生成器. 先介绍一下Note 组件: Note是基本图形 ...

  7. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  8. 转载:CDH5.X完全卸载步骤

    http://blog.csdn.net/wulantian/article/details/42706777 //CDH5.X完全卸载步骤 # by coco # 2015-01-14   1. 关 ...

  9. ssh 无密码登陆

    ssh -i littlesuccess-aws.pem root@172.31.36.91 "cat >> ~/.ssh/authorized_keys" < ...

  10. powershell中使用超大内存对象

    powershell中使用超大内存对象 简单介绍了powershell中超大内存对象的用途,开启powershell超大内存对象的办法. powershell 传教士 原创文章 2016-12-31 ...