我们先假设如今自己创建了个类。我们起名叫MyObject,继承于NSObject。

继承知道吧,就是你这个子类(MyObject)假设什么都不写的话,和父类(NSObject)就是一模一样的。
OC里差点儿全部的类的根源都是NSObject。都是在NSObject的基础上添加成员变量、函数。 父类不是你自己写的类,你不敢保证它是安全的。是否能成功初始化。你有可能不知道里面是什么样子的。 self = [super init],你可能对这步做法可能难以理解。 self指向了父类初始化的内存地址。 类的初始化函数假设失败会返回nil。随后self也为nil。 那么 if(self = nil),你往下的初始化工作都是对nil做的,初始化失败。
假设还想有更深的理解请看以下一段:
父类进行初始化时,用的是子类对象指针self。父类的init方法有可能对这个指针指向的内存区作了大的变更(有可能把这个指针所指的内存释放了,又一次分配了还有一块内存区域返回来。这时这个返回的指针与原来的指针是指向不同地址的)。所以父类初始化后要又一次返回指针。 父类返回的和子类的self的类型都为id类型(通用类型)。父类的init方法若返回的指针与self不一样。在父类的init方法中已作了release和新的内存分配,不须要自己再去release self,直接用父类init方法返回的指针就能够了。 if ( self = [super init] )
{
仅仅要知道你须要在此你初始化的工作就可以 } return self;
基类里面是不须要这个的。都是在子类里面才用得到。[super init]是使用父类进行初始化,看看父类能不能被初始化,假设不能被初始化,子类就没法继承父类的属性和方法了。这个子类就没意义了。不能拥有父类的属性。所以,在这个地方加上if(self = [super init]),就是用来推断这个的。不能继承的话。就直接返回空对象(没有意义)。

Objective-C语言的 if ( self = [super init] )的更多相关文章

  1. [转] "self = [super init]"的解释与潜藏bug

    Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 这里 ...

  2. OC self = [super init] , 点语法 , @property

    OC self = [super init] , 点语法 , @property 构造方法为啥这么写? self = [super init]; [super init] 的结果可能有三种: 第一种: ...

  3. iOS self = [super init]

    self = [super init] 这个问题一直不太明白,今天研究了一下,在stackoverflow找到了下面的答案: http://stackoverflow.com/questions/29 ...

  4. [super init]方法的调用

    当重新覆盖父类的init方法时,需要调用[super init]方法确认父类中的init是返回一个实例,而不是一个空的实例. 那为什么要调用这个呢? 我得猜测是这样的:因为这是一个初始化方法,需要对对 ...

  5. Swift - Property ''not initialized at super.init call

    Property ''not initialized at super.init call 这个错误应该挺常见的的,为什么在百度上没有找到呢,stack over flow找到了,也不能说是什么解决办 ...

  6. 刨根问底:对于 self = [super init] 的思考

    对象初始化有两种方式:[class new] 与 [[class alloc] init] 对于后者,有分配和初始化的过程,alloc 从应用程序的虚拟地址空间上为该对象分配足够的内存,并且将新对象的 ...

  7. 关于self和super在oc中的疑惑与分析 (self= [super init])

    这个问题貌似很初级,但很容易让人忽略,me too .直到在一次面试时被问到,稀里糊涂的回答了下.实在惭愧, 面试一定都是很注重 基础的,不管高级还是初级. 虽然基础好跟基础不好都可以写代码,网上那么 ...

  8. swift中的如果在构造方法中使用KVC, 调用了super.init(), 报错, 基本数据类型属性找不到

    swift要求, 属性必须有初始化值, 如果不对其赋值, 可以加一个?系统会默认给其包装一个可选值(直说就是nil) 如果定义一个基本类型, 建议直接赋值, 不建议使用? 下面说下标题中的问题 有时候 ...

  9. self = [super init] 最终解释

    答:      init 中调用super的 init方法来初始化自己所包含有的父类信息 1.内存分配      内存应该在[Class alloc]的时候就已经分配了,大小和类型应该由对应的Clas ...

随机推荐

  1. laravel JWTAuth实现api接口鉴权(基础篇)

    官网:https://jwt-auth.readthedocs.io 参考:https://learnku.com/articles/10885/full-use-of-jwt#99529f 1.to ...

  2. jstl笔记

    EL函数库 <%@page import="java.util.ArrayList"%> <%@ page language="java" c ...

  3. MSYS2 使用

    在Windows下编译mongo-c-driver 1.3.x 在Windows下编译mongo-c-driver 1.3.x 1.安装 MSYS2https://sourceforge.net/pr ...

  4. vue 中动画配置

    <transition name="fade">   <router-view ></router-view> </transition& ...

  5. LeetCode 303. Range Sum Query – Immutable

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  6. 早期创业,应该充分利用互联网产品和服务(从”皇包车”看一家全球中文车导服务平台如何选用ToB产品)

       前段时间,在搜索"皇包车"相关的资料,于是在IT桔子网站看到了"从'皇包车'看一家全球中文车导服务平台如何选用ToB产品"这篇文章.   我是非常的震撼! ...

  7. npm 发包

    前几天封装了公用的locaStorage组件,当然封装后需要发布npm官网,于是摸索了一番终于搞定了,总结下来希望对大家有所帮助 npm安装的package一般支持下面几大类: 本地包 url远程包 ...

  8. 将Java程序打包成可执行EXE文件的步骤

    需要的工具myeclipse .jar2exe(附上下载地址,直接解压就可以用链接: https://pan.baidu.com/s/1qYPRgXu 密码: wbva) 1.将Java项目导出成.j ...

  9. SQL Server-索引管理

    http://www.2cto.com/database/201305/207508.html SQL Server-索引管理   一.显示索引信息 在建立索引后,可以对表索引信息进行查询. (1)在 ...

  10. MTK android L使用汇顶TP如何使用B协议

    使用B协议上报之前的代码: #include "tpd.h" #include "tpd_custom_gt9xx.h" #ifndef TPD_NO_GPIO ...