iOS self = [super init]

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

http://stackoverflow.com/questions/2956943/why-should-i-call-self-super-init

我对这些答案简单翻译总结下:

要明白这个问题,首先要知道self 是什么东西,我们什么时候会用到self。

时间: 2024-11-05 15:54:37

iOS self = [super init]的相关文章

[Obj-C笔记] "self = [super init]"的解释与潜藏bug

转自:http://blog.csdn.net/aoyuehan11/article/details/10268231 Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 这里涉及了几个问题, 1. [super init]的作用: 面向对象的体现,先利用父类的init方法为子类实例的父类部分属性初始化. 2. self 为什么要赋值为[super in

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

Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 这里涉及了几个问题, 1. [super init]的作用: 面向对象的体现,先利用父类的init方法为子类实例的父类部分属性初始化. 2. self 为什么要赋值为[super init]: 简单来说是为了防止父类的初始化方法release掉了self指向的空间并重新alloc了一块空间.这时的话,[

关于[super init]的一些认识(转载)

首先说一下自己的理解.下面的这种代码,在类初始化的第一个方法中很常见 -(instancetype)initWithName:(NSString *)name{ self = [super init]; if(self){ bookName = [NSString stringWithString:name]; book = [NSMutablearray array]; } return self; } 一般情况下,在OC中定义一个类的时候,总要提供一个初始化方法,而一般的初始化方法的规则是

Objective-C语言的 if ( self = [super init] )22

我们先假设现在自己创建了个类,我们起名叫MyObject,继承于NSObject. 继承知道吧,就是你这个子类(MyObject)如果什么都不写的话,和父类(NSObject)就是一模一样的. OC里几乎所有的类的根源都是NSObject,都是在NSObject的基础上增加成员变量.函数. 父类不是你自己写的类,你不敢保证它是安全的,能否成功初始化,你有可能不知道里面是什么样子的. self = [super init],你可能对这步做法可能难以理解.self指向了父类初始化的内存地址.类的初始

init()方法必须使用super.init(config)的原因--Servlet

原 因: 一个servlet在它的init()方法中传递它的ServletConfig实例,在其他的方法中却不可以.当一个servlet在 init()方法外需要调用config对象时就会产生问题.使用super.init(config)语句就解决了这个问题,该语句通过唤醒 GenericServlet的init()方法, 该方法保存了这个config对象的一个引用,以备将来使用.那么,一个servlet是怎样利用这个保存的引用的呢?是通过自身唤醒方法.在执行 中,GenericServlet类

关于 objective - C 的 super init

[super init] 的结果可能有三种: 第一种: [super init] 初始化成功,这个是最最正常的情况. 第二种: [super init] 初始化失败,我们都知道oc的两步创建,alloc开辟内存空间,init初始化对象,但是init还有另外一个作用,在初始化失败的时候,init方法会返回一个nil.回头行文的最上面,如果self为nil,那么if(self)语句的内容,将不被执行,已确保程序健壮安全. - (instancetype)init { self = [super in

关于 self = [super init];

[plain] view plaincopyprint? - (id)init { self = [super init]; // Call a designated initializer here. if (self != nil) { // 省略其他细节 } return self; } 容易让人困惑的地方在于,将父类初始化之后,将其返回的对象指针覆盖当前对象的指针. 这种方式令人费解,目前暂时找不到官方解释这么做的原因. 官方文档 有解释. 我们先分以下几种情况分别分析:(假设super

ios initialize和init等方法

在程序运行过程中,创建多个类对象,只会调用一次initialize.而创建几个类对象就会调用几次init; 创建一个类aa,分别重写 initialize和init方法 #import "aa.h" @implementation aa + (void)initialize{ NSLog(@"%s",__func__); } - (instancetype)init{ self = [super init]; if (self) { NSLog(@"%s&

Objective-C语言的 if ( self = [super init] )

我们先假设现在自己创建了个类,我们起名叫MyObject,继承于NSObject. 继承知道吧,就是你这个子类(MyObject)如果什么都不写的话,和父类(NSObject)就是一模一样的. OC里几乎所有的类的根源都是NSObject,都是在NSObject的基础上增加成员变量.函数. 父类不是你自己写的类,你不敢保证它是安全的,能否成功初始化,你有可能不知道里面是什么样子的. self = [super init],你可能对这步做法可能难以理解.self指向了父类初始化的内存地址.类的初始