Objective C 类通过工厂方法继承

2024-03-22

我想继承一个具有工厂方法的框架类。如何使工厂方法返回我继承的类类型的对象?我发现这篇有用的文章 http://qualitycoding.org/factory-method/它描述了类似的情况,但在他们的情况下你可以控制超类。我怎么能写,比如说,一个子类UIImage that imageNamed:会返回我的子类类型的对象吗?


我想继承一个具有工厂方法的框架类。如何使工厂方法返回我继承的类类型的对象?

这就是你的全部should得做:

@interface MONImage : UIImage
@end

@implementation MONImage
@end

Then:

MONImage * image = [MONImage imageNamed:name];

例如,我如何编写 UIImage 的子类 imageNamed: 将返回我的子类类型的对象?

+[UIImage imageNamed:]的实现将子类化器从这种方法中编写出来。因此,您需要自己实现此方法。

这是如何一should声明一个工厂方法:

+ (instancetype)imageNamed:(NSString *)pName;

以及如何一个should实施它:

+ (instancetype)imageNamed:(NSString *)pName
{
  MONImage * image = [[self alloc] initWithThisDesignatedInitializer:pName];
                       ^^^^ NOTE: self, not a concrete class
  ...set up image...
  return image;
}

但他们并没有那样做——+[UIImage imageNamed:]写出子类并返回UIImage当你写的时候MONImage * img = [MONImage imageNamed:pName];。有时这样做是有充分理由的。有些方法应该具有“最终”语义。当您的方法可能返回多种类型(如在类簇中)时,通常会出现这种情况。该语言不表达“最终”方法——但这样的方法至少应该被记录下来。


所以要解决这个问题UIImage case:

@interface MONImage : UIImage

+ (instancetype)imageNamed:(NSString *)pName;

@end

@implementation MONImage

+ (instancetype)imageNamed:(NSString *)pName
{
    UIImage * source = [UIImage imageNamed:pName];
    CGImageRef cgImage = source.CGImage;
    if (cgImage)
        return [[self alloc] initWithCGImage:cgImage];
    // try it another way
    return nil;
}

@end

注意UIImages and CGImages 是不可变的。这不应导致图像数据的深层复制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective C 类通过工厂方法继承 的相关文章

随机推荐

  • 在 R 中的函数内保存单个对象:RData 文件大小非常大

    我试图在 R 中保存修剪后的 GLM 对象 即所有 非必要 特征设置为 NULL 例如残差 prior weights qr qr 举个例子 看看我需要执行此操作的最小对象 print object size glmObject 16899
  • 需要在 5 秒内使用 hibernate 在 mysql 中插入 100000 行

    我正在尝试使用 Hibernate JPA 在 5 秒内向 MYSQL 表中插入 100 000 行 我已经尝试了 hibernate 提供的所有技巧 但仍然无法做得比 35 秒更好 第一个优化 我从 IDENTITY 序列生成器开始 这导
  • 会话没有被破坏

    我有这个文件 安全 php session start if empty SESSION u name header Location emprego php if isset GET logout session destroy head
  • 通用 Windows 平台是否会取代 Windows 8 和 Windows Phone 应用程序的 WinRT?

    通用 Windows 平台是否会取代 Windows 8 和 Windows Phone 应用程序的 WinRT 我的意思是 有一个 WinRT 平台专门为 Windows 8 开发 Metro 应用程序 现在 它被 UWP 取代了 不是吗
  • CPU利用率和能耗之间有什么关系?

    描述 CPU 利用率和能源消耗 电 热方面 之间关系的函数是什么 我想知道它是否是线性 次线性 exp 等 我正在编写一个程序 可以降低其他程序的 CPU 利用率 负载 我主要关心的是我能在能源方面受益多少 此外 我的服务器主要用作数据中心
  • HTTP 慢速发布和 IIS 设置以防止

    因此 我们从一家安全公司收到了这份报告 称我们在 IIS 8 0 上运行的 MVC 网站容易受到慢速 HTTP post DoS 攻击 报告指出我们应该 限制请求属性是通过
  • 如何等待猫鼬查询的结果?

    我尝试根据猫鼬查询的结果过滤数组 标准过滤器函数期望回调返回 true 或 false 我的麻烦是这个信息取决于 mongoose findOne 查询的异步结果 code that does not work myArray filter
  • PageSpeed 指责脚本在使用外部图像时存在“渲染阻塞”

    我在页面正文的结束标记之前放置了一个来自 CDN 的脚本 上面 谷歌的 PageSpeed Insights 说 消除首屏内容中阻碍渲染的 JavaScript 和 CSS您的页面有 1 个阻止脚本资源 这会导致页面渲染延迟 我在结束之前就
  • 使用 Visual Studio 2008 错误创建输出文件夹

    我有很多项目的解决方案 实际上有一个核心项目和一些插件 我更改了所有插件的 OutputPath 因此所有二进制文件最终都位于 Core bin debug 文件夹中 这是必要的 因为核心没有对插件的引用 因此它在编译时不会 包含 插件二进
  • Cocoa应用程序菜单-如何重新创建?

    在 MainMenu xib 中 我删除了默认的主菜单 它会自动为您提供应用程序菜单 以及文件 编辑 格式 查看 窗口 帮助菜单 我需要采取哪些步骤才能将其添加回我的应用程序中 我将创建一个新应用程序 然后仅复制Main Menu回到你的M
  • 如何限制Java 8应用程序消耗的总内存?

    为了限制 Java 7 应用程序消耗的总内存 我可以使用以下公式 取自本文 https plumbr eu blog why does my java process consume more memory than xmx 最大内存 Xm
  • VB6:如何从日期类型中删除时间部分

    我有一个Date还包含时间的变量 Dim dt As Date dt 8 3 2016 7 10 40 AM gt 以某种方式删除时间 所以结果应该是 dt 8 3 2016 怎么去掉时间呢 对于另一个日期类型变量 dt DateValue
  • Rails 3 ActiveRecord:UNION

    有没有办法在 Rails 3 中使用 MySQL UNION 我认为让其工作的唯一方法是直接执行查询 ActiveRecord Base connection execute SELECT REPEAT a 1 UNION SELECT R
  • 根据组枚举mysql中的行

    我有一组记录 例如 A B 1 5 1 6 1 9 2 1 2 8 其中我们有两个组 A 1 和 A 2 组内记录按 B 中的值排序 我需要在每个组中添加一个带有枚举的列 A B C 1 5 1 1 6 2 1 9 3 2 1 1 2 8
  • 将父类强制转换为子类

    我有 Message 类 我已经扩展并添加了新属性 class ChildMessage Message prop 在尝试将消息类添加到 ChildMessage 列表时 我得到添加类的 Null 引用 var myChildList ne
  • BMI计算器C代码[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试编写一个简单的 BMI 计算器 但出于某种原因 当我尝试身高 175 公式为 1 75 和体重 70 时 它应该给出 2
  • 使用 OpenXmlReader

    我讨厌诉诸 StackOverflow 来获取如此 看似 基本的东西 但过去几个小时我一直在与 Microsoft 斗争 似乎陷入了死胡同 我正在尝试阅读 大型 Excel 2007 电子表格 Google 友好地告诉我 使用 OpenXm
  • UITableview:单击自定义按钮时动态更改单元格高度

    我有一个 UITableview 其中每个单元格都有一个按钮 我的问题是 如果我单击第一行中的按钮 单元格的高度会增加 然后我单击 tableviewcell 中的另一个按钮 已展开的单元格高度将减小 选定的单元格高度将增加 尝试此链接后U
  • Ruby on Rails:符号作为 form_for 中的参数

    我明白传递给的是什么form for执行以下操作时的方法 if user在控制器中设置 这是很明显的 但当我们经过时会发生什么 user 正如我在很多例子中看到的那样 我什么时候应该使用符号版本 使用该符号将生成
  • Objective C 类通过工厂方法继承

    我想继承一个具有工厂方法的框架类 如何使工厂方法返回我继承的类类型的对象 我发现这篇有用的文章 http qualitycoding org factory method 它描述了类似的情况 但在他们的情况下你可以控制超类 我怎么能写 比如