iOS 快速创建对象的类方法里的self

快速创建对象的类方法的进化历程:

原始版本:

+ (Book *)book {

return [ [ [Book alloc ] init ] autorelease ];

}

进化一版本:

+ (id)book {

return [ [ [self alloc ] init ] autorelease ];

}

进化二版本:

+ (instancetype)book {

return [ [ [self alloc ] init ] autorelease ];

}

进化一版本比原始版本优的地方,就在于子类调父类的方法时,返回的是子类自身,而不是父类

原始版本的情况下:

  有Dic.h这个类,继承自Book类,并且这个类有-(void)findWord;的方法

  Dic *xinhuaDic = [Dic book];  // 执行这个方法时,会先在Dic类里找book方法,没找到才去父类里找

  [xinhuaDic findWord]; // 执行到这行程序就崩溃了,报"经典错误"

所以用 self和id 比 固定类型 好. self的特点就是,谁调用这个方法,self就代表谁

进化二版本比进化一版本优的地方见另一篇随笔<instancetype和id的区别>

时间: 2024-08-05 08:15:36

iOS 快速创建对象的类方法里的self的相关文章

【IOS】IOS快速入门之OC语法

Objective-C 是 C 语言的超集 您还可以访问标准 C 库例程,例如在 stdlib.h 和 stdio.h 中声明的那些例程. Objective-C 还是一种非常动态的程序设计语言,而且这种动态是其最大优势.这种动态体现在它允许在运行应用程序时(即运行时)才去确定其行为,而不是在生成期间就已固定下来.因此,Objective-C 的动态机制让程序免受约束(编译和链接程序时施加的约束):进而在用户控制下,将大多数符号解析责任转移到运行时. 当您想要在源代码中包括头文件时,请在头文件或

ios去掉navigationController和tabBarController里的边框黑线

ios去掉navigationController和tabBarController里的边框黑线 by 伍雪颖 - (void)viewWillAppear:(BOOL)animated { [self.navigationController.navigationBar setBackgroundImage:[TDUtils createImageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsDefault]; [self.

iOS快速打企业包ipa

简 首页 专题 发钱啦 注册 登录 简首页专题下载手机应用 gege 2016.01.19 16:55 写了24604字,被92人关注,获得了152个喜欢 iOS快速打企业包ipa 字数256 阅读150 评论1 喜欢6 收藏文章 分享 注意:因为是打企业ipa测试包,必须要有299$的企业证书,否则不可以 清理缓存,在Xcode菜单栏的Product中选择clean Mou icon 选择编译环境,要在 release 环境下 Mou icon Mou icon 在配置文件的 Buid Set

iOS快速开发框架Bee-Framework应用和解析(二) --- Bee framework架构概览

在第二部分里,分享一下Bee Framework架构的看法.如果您下载了Bee Framework, 在/document/developer_manual.pdf有Bee的开发手册.手册里有典型的教程,也有对架构的讲解.本文试图融入个人的理解,解答以下问题: Bee的MVC是如何工作的,核心组件是哪些? Bee的整体架构如何? 除了MVC, Bee提供了哪些常用的工具和服务? 该如何使用Bee开始一个项目? A1:Bee的核心类包括BeeModel, BeeMessage, BeeUIRout

iOS快速开发框架Bee-Framework应用和解析(三) --- Message, Model, Signal

这一次分享一下BeeMessage, BeeModel, 和BeeUISignal.这三个东东就是Controller, Model, 和Event的主要实现.您也可以到Bee的/documents/developer_manual.pdf中查看详细的开发手册,希望您看了这篇文章能对这几个组件理解更深,适合干什么,从而更得心应手得使用.本文试图解答几个问题: BeeMessage是如何实现的?如何做到封装Http过程的,有什么优缺点和适用场合? BeeModel是如何实现的?和Core Data

ios快速添加约束(storyboard中)

这篇文章是告诉新手如何快速的在storyboard中添加约束: 我们在storyboard中有一些按钮,可以添加约束. 但是最直观.最方便.最快捷的添加约束的方法,在我看来就是使用ctl键: 选中控件,按下ctl,将其拖动到约束的另外一个对象-可能是自己,可能是父视图,可能是兄弟视图. .弹出的框里我们就可以选择我们需要添加的约束,1次添加1个,不多也不少. 快来试试吧,拥抱autolayout!

iOS 快速集成ijkplayer视频直播与录播框架

最近由于需求的变动,项目内把最初最简单的原生直播框架变成了B站开源的ijkplayer框架,下面把具体的过程总结一下整个过程都比较简单,重要的是理解的过程,集成完毕之后,视频的用户体验比苹果原生好了很多.最后会贴出demo的git地址,只需要简单的操作就能快速的在项目中加入该框架 先把B站开源ijkplayer的github地址贴出来 https://github.com/Bilibili/ijkplayer 未使用过的同学,请去自取有助于理解整个视频框架的原理. ** 为何要改变原来项目内的视

6、iOS快速枚举

今天在写程序的时候想在当前视图跳转的时候释放掉当前视图上面add的一些子视图.因为add的子视图有些是在别的类里面add进来的,当前页面不知道自己当前有哪几个类型的子视图.这样,我就想到了用循环遍历来查看当前视图有没有符合条件的子视图,如果有的话就释放掉. 我是这样写的: for(UIView * subView in self.view.subviews) { if([subView isKindOfClass:[XYZSeniorQueryView class]]) { [subView r

ios开发 oc 的类方法与对象方法

首先我们先来了解一下什么是类方法与对象方法. 对象方法: 对象是由"-"开头.比如:-(void)Runner: 对象方法顾名思义只能由对象来调用 比如说: @interface Person : NSObject (void)Runner://对象方法 @end: int main() { Person *p=[Person new];//Person是一个类,它创建一个对象p. [p Runner];//p调用Runner这个方法: return 0; { 在对象方法中可以直接访问