swift引入后,为了使oc和swift更相近,对oc的初始化方法也进行了修正,具体说明,见下面的链接,这个waring的最简单的修正方法是,到相应类的头文件中,去掉在自定义初始化方法后面的 NS_DESIGNATED_INITIALIZER宏.这样系统就不会认为我们定义了designated initializer,仅仅定义了一个convience initializer,就不会报错了! 重要的解释如下: The designated initializer guarantees the ob…
Designated Initializer(指定初始化器)在Objective-C里面是很重要的概念,但是在日常开发中我们往往会忽视它的重要性,以至于我们写出的代码具有潜藏的Bug,且不易发现.保证良好的编写Designated Initializer的风格,可以让我们节约很多时间. 前段时间@吴发伟Ted分享了一篇Twitter团队的一篇博客,里面讲述了Designated Initializer正确的模板以及需要注意的问题.但是里面关于initWithCoder描述不是很清晰,且随后@an…
iOS: 聊聊 Designated Initializer(指定初始化函数) 一.iOS的对象创建和初始化 iOS 中对象创建是分两步完成: 分配内存 初始化对象的成员变量 我们最熟悉的创建NSObject对象的过程: 苹果官方有一副图片更生动的描述了这个过程: 对象的初始化是一个很重要的过程,通常在初始化的时候我们会支持成员变量的初始状态,创建关联的对象等.例如对于如下对象: @interface ViewController : UIViewController @end @interfa…
偶然间看到“ Designated Initializer”一词,心里一惊,这是什么东西,怎么没听说过?难道是我道行太浅?真的是这样?(好伤心啊)一阵子我怀疑之后,果断上网查了一下这个 Designated Initializer,发现名词新颖,但是这用法却是用了无数遍啊,SO?记录一下吧,下次再看到至少知道这么个高端大气的词啊,不能让别人以为咱是个乡巴佬啊…
一个类,可能有很多初始化函数,但是有主次之分,最主要的初始函数应该对类内应当需要初始化的变量进行初始化.这个最主要的初始函数即Designated Initializer(指定初始化器),可以理解为是类的默认初始函数.比如,UIView的Designated Initializer是initWithFrame:而不是init: 原则1.类的正确初始化过程应当依次调用子类到父类的Designated Initializer.即使是用父类的Designated Initializer初始化一个子类对…
仅在此简单记录概念,方便以后回顾... ===================================== designated initializer是指定初始化方法,提供所有参数: secondary initializer间接初始化方法,可以有一个或多个,并且提供一个或 更多的默认参数来调用designated初始化的初始化方法. designated initializer示例: - (instancetype) initWithName:(NSString *)name dat…
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木”或者“偷天换日”. 用途 介绍某种技术的用途,最简单的方式就是抛出一些应用场景来引出这种技术的必要性.因此,这里我举个例子如下. 假设工程中有很多ViewController,我需要你统计每个页面间跳转的次数.要求:对原工程的改动越少越好. 针对以上需求,你可能会立马想出以下两种方案: 方案一:…
C语言是静态语言,它的工作方式是通过函数调用,这样在编译时我们就已经确定程序如何运行的.而Objective-C是动态语言,它并非通过调用类的方 法来执行功能,而是给对象发送消息,对象在接收到消息之后会去找匹配的方法来运行.这种做法就把C语言在编译时的工作挪到了运行时来做,可以获得额外的灵 活性. 在Objective-C中有个@selector,在很多地方被翻译成“选择子”.实际上,对于类的实例对象来说,类的方法是用一个数字来代表的,并非 是我们看到的一个长长的带着:这个字符的一串字符串.通过…
ios 分类中如果增加的方法与被扩展的类方法名重复,则原方法就没法被调用….看以下例子 例如: @interface ClassA : NSObject - (NSString *) myMethod; @end @implementation ClassA - (NSString*) myMethod {return @”class A”; } @end //Category @interface ClassA (CategoryB) - (NSString *) myMethod; @end…
最近整理前人的代码,有好多的hint和waring, 其中整理到Method 'CreateNew' hides virtual method of base type 'TCustomForm', 搞了好一会, 记录下来. 之前这个方法没有加上 reintroduce;overload; Reintroduce: 在子孙类中要声明一个与祖先类中参数不同的方法的时候用Reintroduce,其实你不使用reintroduce也会覆盖屏蔽父类的方法的但是会产生一个警告,     使用了这个关键字,…