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. HttpContext.GetOwinContext().Authentication 报错 解决办法

    HttpContext.GetOwinContext().Authentication 会提示 不包含GetOwinContext 方法的报错信息 解决办法:引入system.web程序集,GetOw ...

  2. winform flash

    1.开发工具:VS2013 2.开发环境:win 10 64位 3.添加控件: 打开VS,点击工具箱--常规--右键--“选择项”---“Com组件”--MacroMedia Flash Factor ...

  3. mac 安装mvn 失败

    安装过程遇到2个问题 1.java版本不对 2.Error: JAVA_HOME is not defined correctly. We cannot execute $/usr/libexec/j ...

  4. daydayup1 codeforces141c

    题意:给定n个数字,代表每个人前面有几个人比他高,让你构造一个height数组,满足条件 思路:直接贪心就好,假设到第i个人,设他的高度为i-a[i]+1,前面比他高的人每个人的高度加1

  5. Whole life

    Whole life the wonder such you bring the beautyI can see but i keep deep inside on itOh life i feel ...

  6. 简单尝试利用vultr vps自架PPTP上网用于工作学习需要

    因为学习和工作的需要用到登陆海外网站查阅相关的资料和文档,之前有需要使用的时候是问网友索要的账户登录本地电脑拨号的,但是老是跟别人要还是不好,决定自己尝试搭建一个长期使用.看到有不少的介绍提到VULT ...

  7. my understanding of (lower bound,upper bound) binary search, in C++, thanks to two post 分类: leetcode 2015-08-01 14:35 113人阅读 评论(0) 收藏

    If you understand the comments below, never will you make mistakes with binary search! thanks to A s ...

  8. memcpy函数用法

    memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...

  9. 【转】Linux下如何清除系统日志

    使用过Windows的人都知道,在使用windows系统的过程中系统会变得越来越慢.而对于Windows下饱受诟病的各种垃圾文件都需要自己想办法删除,不然系统将会变得越来越大,越来越迟钝!window ...

  10. 2D几何变换

    2D点:非齐次坐标x(x,y) (x表示向量矢量) 齐次坐标:x~=(x~,y~,w~)=w~(x,y,1)=w~x~         增广矢量:x—=(x,y,1) w~=0时,齐次点称作理想点或无 ...