类工厂方法实现

2023-11-30

因此,我正在研究 Objective-C 的 Apple 文档(在开始 iphone 开发之前)。其中一项练习指出,我应该创建一个指定的初始值设定项(具有 3 个参数)和合适的工厂方法。

现在我根据我的理解这样做了,但我无法实现工厂方法,因为我不知道是否应该在其实现中使用 alloc 和 init ?

练习:

声明并实现一个新的指定初始值设定项,用于创建 XYZPerson 使用指定的名字、姓氏和出生日期, 以及合适的类工厂方法。不要忘记覆盖 init 调用指定的初始化程序。

代码:

//.h 

-(id)initWithNameAndDob:(NSString *)fName last:(NSString *)lName birth:(NSDate *) dob;

//.m
-(id)initWithNameAndDob:(NSString *)fName last:(NSString *)lName birth:(NSDate *)dob{
    self = [super init];
    return [self initWithNameAndDob:fName last:lName birth:dob];
}

实施过程中缺少什么?

谢谢你,


声明并实现一个新的指定初始值设定项,用于使用指定的名字、姓氏和出生日期创建 XYZPerson...

您的声明是正确的,但您的实现是递归的,因为它正在调用自身。做类似的事情

//.h
-(id)initWithNameAndDob:(NSString *)fName last:(NSString *)lName birth:(NSDate *) dob;
//.m
-(id)initWithNameAndDob:(NSString *)fName last:(NSString *)lName birth:(NSDate *)dob{
    if(self = [super init]) {
        // use the parameters to do something, eg.
        _fName = fName; // assuming you have an ivar called _fName 
        _lName = lName; // assuming you have an ivar called _lName
        _dob = dob; // assuming you have an ivar called _dob
    }
    return self;
}

Then

...以及合适的类工厂方法。

工厂方法是生成对象实例的类方法。最常见的实现是让它分配和初始化对象的新实例并返回它。

//.h
+(instancetype)personWithNameAndDob:(NSString *)fName last:(NSString *)lName birth:(NSDate *) dob {


//.m
+(instancetype)personWithNameAndDob:(NSString *)fName last:(NSString *)lName birth:(NSDate *) dob {
return [[XYZPerson alloc] initWithNameAndDob:fName last:lName birth:dob];
}

Finally

不要忘记重写 init 来调用指定的初始值设定项。

由于您设计的初始化程序是initWithNameAndDob:last:birth: your init实现必须调用它。设计的初始值设定项的参数必须是合理的默认值,在本例中nil很好。

-(id)init {
     return [self initWithNameAndDob:nil last:nil birth:nil];
 }

最后,我想指出您的初始化程序的命名约定并不是那么好。更合适和可读的一个是

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

类工厂方法实现 的相关文章

  • 自动生成的 Swift 桥接标头中“找不到接口声明”

    我当前的项目包含 Swift 和 Objective C 代码 两种类型的源文件都使用另一种语言的代码 当我进行完全清理并重新编译时 几乎每个 Swift 类声明都出现错误Module Swift h 形式为 Cannot find int
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • Objective-C 点表示法与类方法?

    请注意 我特别指的是点表示法与类方法一起使用 而不是与实例方法一起使用 出于好奇 我想看看如果我尝试在类方法中使用 Objective C 点表示法语法会发生什么 我的实验如下 import
  • Xcode 4.2 UITableview 自定义单元格

    我对故事板上的自定义单元格有疑问 我需要从调用的方法访问标签 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPa
  • 如何随机化 NSArray? [复制]

    这个问题在这里已经有答案了 假设我有一个 NSArray 里面有 50 100 个对象 如何将数组按随机顺序排列 有很多方法可以做到这一点 但大多数只涉及生成随机数 也许您可以使用 NSMutableArray 使用此技术 生成 0 到 4
  • 4.4 中新的 Objective-c 文字

    我可以写 42 这会创建一个NSNumber with int值 42 我可以用变量来做到这一点 例如 someIntVar 显然我尝试过但它不起作用 这很糟糕 因为然后我必须经历 NSNumber numberWithInt someIn
  • 核心数据二进制数据允许外部存储崩溃

    我在 iOS 12 0 1 上发生崩溃 日志如下 ImageIO CFDataGetBytes data 0x28539b2f0 size 154262 offset 8 count 8 dst 0x16dbf86f0 External d
  • 如何更改标签栏图标颜色从默认蓝色?

    我有四个标签 我能够将选项卡图标颜色从默认的蓝色更改为红色 或可能任何颜色 并且效果非常好 问题是它仅适用于三个选项卡项目 最后一个选项卡默认为蓝色 下面是代码 我正在编码这个rootviewcontrollerAppDelegate m您
  • 以编程方式进行排序时检索 ViewController 堆栈

    static func showMenuView parentVC UIViewController let storyboard UIStoryboard name Main bundle nil let resultController
  • 如何使用 UISlider 以及如何将滑块设置为特定值?

    我是第一次使用 UIslider 首先我想知道如果值的范围是 0 到 10 如何获取滑块位置的值 其次 我希望我的滑块设置为 5 个不同的值 如 1 2 3 4 5 slider should not set between the lab
  • 播放声音无延迟 iOS

    我找不到如何以低延迟播放真实声音的方法 我尝试使用 AVFoundation 音频播放器 巨大的延迟大约 500 毫秒 所以我尝试创建系统声音 如果运气不好 延迟大约为 200 毫秒 虽然不多 但对我来说没有用 我最多需要 50 毫秒 确保
  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc
  • 允许用户从 UILabel 选择文本进行复制[重复]

    这个问题在这里已经有答案了 我有一个 UILabel 但如何允许用户选择其文本的一部分 我不希望用户能够编辑文本 也不希望标签 文本字段具有边框 这是不可能的UILabel 你应该使用UITextView为了那个原因 只需使用禁用编辑即可t
  • 使用 Python 查找 Mac OS X 中的当前活动窗口

    有没有办法使用 Python 在 Mac OS X 上查找给定时间当前活动窗口的应用程序名称 这应该有效 usr bin python from AppKit import NSWorkspace activeAppName NSWorks
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • 使用 NSSet/NSMutableSet 来过滤对象?

    我已经看到一些有关使用 NSSet NSMutableSet 过滤对象的问题 答案 这些情况使用简单类型的对象 例如NSString or int 以下是用于过滤的代码示例NSString对象 NSSet smallArray NSSet
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 增加 NSData 的长度

    基本上 我有一个 46 个字符的 NSString 我将其转换为 NSData 我需要将字符串填充到 48 个字符 仅在 NSString 末尾添加 是行不通的 所以 我只是使用以下方法增加了 NSData 的长度 NSString str
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p

随机推荐

  • 将 VSCode 安装到特定文件夹中

    我刚刚下载了 Visual Studio Code 应用程序https code visualstudio com 当我尝试安装它时 它只是自行安装 没有更改安装路径的选项 我有一个外部硬盘驱动器 我希望在其中放置 IDE 而不是本地硬盘驱
  • 如果移除 DOM 元素,其侦听器是否也会从内存中移除?

    如果 DOM 元素被删除 它的监听器是否也会从内存中删除 现代浏览器 纯 JavaScript 如果被删除的 DOM 元素是无引用的 没有引用指向它 那么yes 元素本身由垃圾收集器以及与其关联的任何事件处理程序 侦听器拾取 var a d
  • Selenium WebDriver 将 Firefox 路径更改为 Tor

    我正在尝试更改 ruby 中的网络驱动程序以打开 Tor 浏览器而不是默认的 Firefox 浏览器 我正在使用以下代码 并且在运行此代码之前打开了 Tor 浏览器 path C Users Bonnnie Downloads Tor Br
  • 是否可以使用 Omnifaces #{of:setToList} 创建可编辑数据表

    我正在尝试创建一个可编辑的数据表 其值为java util Set 但在 JSF 2 0 和 2 1 中这是不可能的 如中所述在 Datatable JSF 中显示 Set 集合中的对象不起作用 到目前为止 作为解决方案 所有集都转换为ja
  • 我的 UIButton 的位置在所有模拟器中都不同

    我在一个项目下 我使用代码 不是通过故事板 在视图控制器的底部创建了一个 uibutton 但是当我运行我的应用程序时 我的 uibutton 放置在不同的位置 例如在 iphone 5 6 模拟器中某个位置 在 4s 中 ipad 模拟器
  • AngularJS 错误:指令“XXXXXX”的模板必须只有一个根元素

    这是后续这个问题 我正在尝试构建和 HTML table 与多个 tr 行 我希望其中一些行由我的指令呈现myDirectiveA以及其他由我的指令 myDirectiveB 呈现的内容 您可以在下面看到我的文件的样子 如果只有一个 一切正
  • Android,如何创建选项菜单

    在这里 我尝试制作选项菜单 但菜单没有显示在屏幕上 所以请指导我哪里做错了 菜单测试 java public class MenuTest extends Activity Override public boolean onCreateO
  • 给定当前日期和周开始,获取周开始和结束日期

    如果可能的话 我更喜欢针对以下场景的 joda 或非 joda 解决方案 假设我的一周从 02 05 2012 开始 并且给定的当前日期是 02 22 2011 我需要计算给定当前日期的周开始日期和结束日期 所以我的解决方案应该让一周从 0
  • ASP.Net 按钮单击事件未触发

    这或许与这个问题 但我有更多的信息 最近 在使用 Linq 编写了一些新代码后 我将 ASP Net 应用程序更新到了 NET 3 5 现在我的页面间歇性地停止触发事件处理程序 我将范围缩小到带有 Ajax 的页面 并且我认为是 Scrip
  • C 编译错误:“可变大小的对象可能未初始化”

    为什么我使用以下代码收到错误 可变大小的对象可能未初始化 int boardAux length length 0 我假设您正在使用 C99 编译器 带有支持动态大小的数组 您的代码中的问题是 当编译器看到您的变量声明时 它无法知道数组中有
  • ASP.Net Identity 注销所有会话

    如何使用 ASP NET Identity 注销所有会话 假设您使用同一用户从两个不同的浏览器登录 当用户从一个浏览器注销时 另一个浏览器的会话也应该失效 我需要这个来使用户在更改密码时的所有会话无效 您可以使用以下代码使用 ASP Net
  • 在 Nexus 中部署工件时出错

    我在 Nexus 服务器中部署自己的存储库中的工件时遇到错误 无法部署工件 无法传输工件 无法传输文件 http my artifact 返回代码为 400 我让 Nexus 与一个自定义存储库 my repo 一起运行 并使用下一个 Ma
  • 在作业中进行大量选择后,Spring 批处理内存不足

    我的工作遇到了问题 我正在尝试从数据库读取记录并写入txt 文件 数据库包含 1 800 000 条记录 有 149 列 问题是 select 位于 jobConfig xml 中的 bean mysqlItemReader 中 但是 我认
  • spring MVC POST 表单的大小限制?

    我有一个表格
  • 将存储库公开为 IQueryable

    我想将存储库公开为 IQueryable 类型 该存储库使用 Linq to NHibernate 与数据库进行通信 谁能指出我的示例实现吗 例如 我的存储库上相应的 GetEnumerator 实现是什么样子 Edit 这样的事情合适吗
  • 使用passport.js在node.js中进行身份验证后重定向到上一页

    我正在尝试使用node js express 和passport js 建立登录机制 登录本身工作得很好 会话也用 redis 很好地存储 但在提示用户进行身份验证之前将用户重定向到他开始的位置时确实遇到了一些麻烦 例如用户点击链接http
  • NumberField 或如何让 TextField 输入 Double、Float 或其他带点的数字

    根据评论这个问题我做了一个自定义的 SwiftUIView基于一个TextField 它使用数字键盘 只能输入数字和点 只能输入一个点 点 并且可以通过Bindable Double State价值通过View用于输入 但有一个错误 当您删
  • iOS 上的 CVOpenGLESTextureCache 与 glTexSubImage2D

    我的 OpenGL 应用程序使用 OpenGL 全屏渲染纹理并定期更新其中的一部分 到目前为止 我一直在使用 glTexImage2D 来推送初始纹理 然后使用 glTexSubImage2D 更新脏区域 为此 我使用单缓冲 这效果很好 我
  • 大数的质因数分解[关闭]

    Closed 这个问题是无关 目前不接受答案 我想求小于10 12的大数的质因数分解 我得到了这个代码 用java public static List
  • 类工厂方法实现

    因此 我正在研究 Objective C 的 Apple 文档 在开始 iphone 开发之前 其中一项练习指出 我应该创建一个指定的初始值设定项 具有 3 个参数 和合适的工厂方法 现在我根据我的理解这样做了 但我无法实现工厂方法 因为我