登录
你真的了解 NSObject 对象的初始化吗?

在上一篇文章《利用__attribute__特性提高 APP 的鲁棒性》中,提及了NS_DESIGNATED_INITIALIZER属性。该属性表示指定初始化方法,今天的主题就是聊一聊NSObject的初始化流程。

初始化分为两步:

  1. 分配内存
  2. 初始化对象的成员变量

分配内存

如果有C语言开发经验的人,malloc之后,一般需要memset一下。但在Objective-C里面,可不是这样的。

苹果这段话表达了三个意思:

  1. 开辟一个内存空间
  2. isa变量和引用计数
  3. 将所有的变量初始值置为0

初始化

从上面的描述中,仅仅alloc出来的对象还不能直接使用,还需要调用初始化函数。

以下是NSObject的初始化函数声明:

而这里的init函数是NS_DESIGNATED_INITIALIZER的,也就是指定了初始化函数。

与指定初始化函数(designated initializer)对应的是便利初始化函数(convenience initializers)

接下来分析一个具体的例子:

#import <Foundation/Foundation.h>
@interface P2PBomb : NSObject
@property (copy, nonatomic) dispatch_block_t block;
@property (copy, nonatomic) NSString *capital;

-(instancetype)initWithCount:(NSString *)count NS_DESIGNATED_INITIALIZER;
-(instancetype)initWithCount:(NSString *)count year:(NSInteger)year;

@end

这里声明了一个指定初始化函数initWithCount和一个便利初始化函数:initWithCount:year。

这里给出了三个警告,第一个警告表示父类的指定初始化函数没有找到。第二个和第三个警告表示不能直接调用父类的初始化函数

解决方案如下:

从以上实现可以得出如下结论:

top Created with Sketch.

玻璃钢生产厂家合肥人物玻璃钢雕塑哪家便宜安徽抽象玻璃钢雕塑销售电话户外商场美陈厂家供应彩色玻璃钢雕塑多少钱天津花钵玻璃钢雕塑定制园林玻璃钢卡通雕塑哪家便宜玻璃钢雕塑桃阿克苏玻璃钢雕塑制作厂家广西做玻璃钢雕塑商场气球美陈报价玻璃钢人物雕塑哪家实力强中卫玻璃钢雕塑供应商玻璃钢雕塑校园玻璃钢造型雕塑公司地址供应型号全的玻璃钢雕塑江苏商场中秋美陈运城抽象玻璃钢彩绘雕塑玻璃钢树脂雕塑施工工艺绍兴玻璃钢雕塑摆件销售河南中庭商场美陈销售圣诞节商场气球美陈铜仁商场美陈门头玻璃钢卡通雕塑平台南京特色玻璃钢雕塑销售厂家校园书形玻璃钢雕塑卡通玻璃钢雕塑一般多少钱商场美陈布置线条玻璃钢动物长颈鹿雕塑小品玻璃钢雕塑摆件福建秋季商场美陈供货商香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化