创建仅包含给定类的对象的数组

2023-12-08

好的,我有下面的代码(Objective-C FYI),我想知道是否要创建一个 NSMutableArrayc_data对象,我该怎么做呢?这有点像声明一个List<c_data> cData in C#.

@interface c_data : NSObject {
    double value;
    int label;
    int ID;
}    
@property double value;
@property int label;
@property int ID;

-(c_data*) init;
-(c_data*) initWithValue:(double)value;    
@end

@implementation c_data
@synthesize value, label, ID;
-(c_data*) init {
    return self;
}
-(c_data*) initWithValue:(double)val {
    value = val;
    return self;
}
@end

如果你看看班级feat_data,我正在努力使cData类的数组c_data。我已经包括了我的尝试,但我认为这是不对的,因为c_data不是一个数组。有什么建议么?

@interface feat_data : NSObject {
    NSMutableArray *nData;
    NSMutableArray *cData;
    char type;
}
@property(nonatomic, retain) NSMutableArray *nData;
@property(nonatomic, retain) NSMutableArray *cData;
@property char type;
-(feat_data*)init;
@end

@implementation feat_data
@synthesize nData, cData, type;
-(feat_data*)init {
    nData = [[NSMutableArray alloc] init];
    c_data *c_dataInstance = [[c_data alloc] init];
    cData = [[NSMutableArray alloc] initWithArray:c_dataInstance];
    return self;
}
@end

Objective-C 中不存在静态类型/模板/泛型集合之类的东西。基本上,强类型集合的目的是在编译时提供静态类型安全。对于像 Objective-C 这样动态的语言来说,这种方法没有什么意义。解决 Objective-C 集合中不同对象类型问题的方法是仅插入适当的对象类型。 (另外,请记住,数组将保留它包含的对象,因此,如果您插入一个新对象而不释放它,并且丢失了指向该对象的指针,则会泄漏内存。)

如果您考虑一下,泛型的最大好处之一就是能够将集合中的对象直接检索到静态类型变量中,而无需进行强制转换。在 Objective-C 中,你可以直接存储到id变量并发送您喜欢的任何消息,而不必担心 ClassCastException,或者编译器抱怨对象没有(可能没有?)实现您尝试调用的方法。如果需要,您仍然可以静态键入变量并转换结果,但更简单的方法是使用动态类型(和-isKindOfClass: and -respondsToSelector:如果需要的话)。

顺便说一句,这个问题在 Stack Overflow 上有几个相关的版本。了解要搜索的术语(“通用”、“强类型”或“模板”)可以帮助找到它们。以下是一些:

  • 为什么 C# 和 VB 有泛型?它们提供什么好处?
  • 有什么方法可以强制在 NSArray、NSMutableArray 等上进行输入吗?
  • Cocoa/Objective-C 中有类似通用列表的东西吗?
  • Objective-C 中有强类型集合吗?

最后,我同意 William 的观点 - 在您提供的示例中,您的 init 方法非常令人震惊。你最好学习并遵守苹果的规则分配和初始化对象在 Objective-C 中。它需要打破其他语言的习惯,但它会在未来的某个时刻让你免去无尽的疯狂时间。 :-)

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

创建仅包含给定类的对象的数组 的相关文章

  • UIDocumentInteractionController 阻止“打开方式”表中的空投

    在我的应用程序中 我允许用户通过 Instagram 分享照片 这需要使用 UIDocumentInteractionController 如果手机支持 则会自动检测空投 如何将其从 打开方式 操作表中删除 即使我使用 UIActivity
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 使用 LINQ 通过一个属性比较两个列表

    假设我有以下内容 class Widget1 public int TypeID get set public string Color get set class Widget2 public int TypeID get set pub
  • iOS 中的 CSV 逐行解析

    我正在 Objective c 中解析 CSV 文件 该文件包含如下内容 line 40 Rising searches line 41 nabi avc Breakout line 42 stonewall 700 line 43 med
  • 拖动时获取MKAnnotation的坐标

    我正在根据用户添加的注释的位置创建一条路径 MKPolyline 我想允许用户通过拖动引脚来更改路径 我目前可以做到这一点 但 MKPolyline 不会更新 直到引脚被放下 我实施了 void mapView MKMapView mapV
  • 为沙盒 Cocoa 应用程序创建临时文件

    我的应用程序是沙箱化的 根据最新的应用程序商店指南 我想创建一些临时文件 我可以这样做吗 如果 是 我可以在哪里这样做 有没有预先指定的路径 还有访问该路径的命令 您应该使用NSTemporaryDirectory 函数 它将查找并返回适合
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 如何检查 BOOL 是否为空?

    有没有办法在将值分配给 BOOL 之前检查该值是否为 NULL Nil 例如 我在 NSDictionary 中有一个值可以是 TRUE FALSE NULL mySTUser current user following results
  • 如何在 Xcode 4 中在 .h 和 .m 之间切换

    刚刚安装的 Xcode 4 到目前为止一切顺利 除了 Apple 更改了所有键盘快捷键 有人知道如何在 h 和 m 之间切换吗 苹果改变了各种快捷键 但要在标头和实现之间切换 新的快捷键是 You can change it back to
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • 运算符“==”不能应用于“T”和“T”类型的操作数

    在下面的代码示例中 编译器抱怨x Id reference Id 运算符 不能应用于 TId 和 TId 类型的操作数 类似的问题已被问到 SO 并通过替换来解决 运算符与IEquatable lt gt Equals or Equalit
  • 带有 Core Data 对象的动态 UITableView 高度

    过去几天我一直在试图解决一个谜团 即为什么我的批处理大小为 20 的 NSFetchedResultsController 总是在获取完成后立即错误 即加载到内存中 我的所有对象 从而导致请求需要约 20 秒 事实证明 这是因为在我的 he
  • 为什么 Collections.counter 这么慢?

    我正在尝试解决罗莎琳德的基本问题 即计算给定序列中的核苷酸 并在列表中返回结果 对于那些不熟悉生物信息学的人来说 它只是计算字符串中 4 个不同字符 A C G T 出现的次数 我期望collections Counter是最快的方法 首先
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 玻璃效果 UIView

    我想知道如何在 UIView 上添加玻璃效果 我想像这样的效果 http pttrns com pickers detail 0dc9d9f6c6a7577613b3453768eee3b3在灰色半透明视图上 您 可以在这里看到 Thank
  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • 使用 Storyboard 时获取 NSManagedObjectContext

    目标是获取当前的 NSManagedObjectContext 以便使用 Core Data 在 iOS 4 3 中 我将 UINavigationController 的委托设置为 AppDelegate 如下所示 在 AppDelega
  • 如何通过辅助功能 API 获取当前所选文本的全局屏幕坐标。

    我需要帮助来了解字典应用程序如何在任何应用程序上按 CMD CTRL D 时显示所选文本的以下弹出对话框 我想实施 我的可可应用程序具有相同的功能 我的应用程序将在后台运行 并显示有关所选文本的一些热键的建议 我已经实现了热键捕获 我只需要
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix

随机推荐

  • Excel 日期值

    如何将日期字符串 2019 06 20T00 00 00 01 00 转换为 Excel 日期 当我在 Excel 中尝试此操作时 DATEVALUE 返回 Value 日期字符串来自C DateTime ToShortDateString
  • dyld`__abort_with_payload:没有错误消息

    当我使用 Xcode 启动应用程序时 出现崩溃 但没有错误 该应用程序刚刚停止在此线程上 我可以做什么来获得有关该问题的更多信息 如果您使用自定义框架 则需要将其放入 Xcode 项目中 目标 常规 选项卡下的 嵌入式二进制文件 部分
  • 如何在栅格之间进行插值?

    如果有三个栅格 作为矩阵 r1 lt raster nrows 10 ncols 10 r1 lt setValues r1 1 ncell r1 r16 lt raster nrows 10 ncols 10 r16 lt setValu
  • Android 光标位于业务对象的通用列表上?

    在 NET 领域 我通常会查询数据库并填充通用列表类型的集合 然后应用程序将使用它 在 Android 领域 我一直在阅读有关应用程序中的数据库访问和使用的内容 为什么大多数文档都显示游标的使用以及使用常量来访问它 也许这是为了节省资源 也
  • 为什么 requestAnimationFrame() 在帧末尾运行我的代码,而不是在帧开头?

    var y 0 canvas height 5 ctx fillStyle green function update requestAnimationFrame update ctx clearRect 0 0 canvas width
  • 100% 的子 div 高度被忽略

    我正在使用 Peter 的优秀示例 即 100 高度的 div 和粘性页脚 HERE 我省略了页脚部分 因为我没有使用它 但是 每当我使用子 div 并尝试做同样的事情时 它都不起作用 我希望子 div 也采用其父级高度的 100 这是CS
  • 如何在 Android 上启用 cmake 的剥离

    我们正在开发一个带有原生部分的 Android 库 我们主要是 Java 开发人员 而不是 C 开发人员 我们的一点点 C 经验足以编写我们需要的本机代码 但我们在剥离方面遇到了意想不到的麻烦 这与编程没有直接关系 由于某些原因 我们确实需
  • 合并合并 pdf 之间的字体 itextsharp C#

    我需要将多个 pdf 合并在一起 我正在使用 itextsharp 创建所有 pdf 我需要将 pdf 的大小减小到尽可能小的大小 我知道每个 pdf 的字体都是重复的 合并后的 pdf 中是否只能使用一组字体 例如 pdf1是2 8mb
  • Python在数据框中每周增加日期

    我正在尝试满足此要求 我需要以周为单位增加日期 以下是相同的代码 import pandas as pd import numpy as np c 15 s week 1 2 3 4 5 6 7 8 Sales 10 20 30 40 50
  • Java 泛型方法重写

    我有界面 public interface CartService extends RemoteService
  • 如何使用 npm 发布客户端脚本?

    我的 Nodejs 包包含在后端执行的代码以及在浏览器上执行的单个 js 文件 要使用浏览器脚本 必须将其放入script显然 HTML 文件中的元素 我的问题是 是否存在关于浏览器 js 文件如何以独立于 webpack gulp gru
  • pandas from_json 方法用法

    我有一个如下所示的 JSON 文件 A 1 B 2 C x 1 y 2 z 3 x 2 y 7 z 77 pandas from json返回包含 A B 和 C 列的数据框 但是 实际上我正在寻找包含 x y 和 z 的列 有办法得到吗
  • 使用Python子进程将stdout重定向到stdin?

    我正在使用 subprocess 模块从 shell 调用程序 该模块将二进制文件输出到 STDOUT 我使用 Popen 调用程序 然后我想将流传递给 Python 包 称为 pysam 中的函数 不幸的是 该函数不能使用 Python
  • 使用 DX:AX 装配 x86 划分

    我正在使用 masm 遇到了一个我不太明白如何解决的场景 例如 X A C D 如果我先乘以 C D 我的值是 DX AX 据我所知 我不能将其用作除数 如果我将 A C 和 A D 分开进行除法 我就会面临失去精度的风险 来自提醒等 实现
  • 从名称实例化泛型的最佳方法是什么?

    假设我只有 MyCustomGenericCollection of MyCustomObjectClass 形式的字符串形式的泛型类名 并且不知道它来自哪个程序集 那么创建该对象的实例的最简单方法是什么 如果有帮助 我知道该类实现 IMy
  • Tomcat连接池,为Web应用程序安装jdbc驱动程序

    我正在制作一个网络应用程序Tomcat 6作为容器 我正在尝试使用连接池 我正在使用的jdbc驱动程序是jtds 1 2 2 当驱动程序 jar 放在下面时 池工作正常 Catalina Home lib 但我的托管提供商不允许我这样做 当
  • 最佳实践:在 PHP 中使用长的多行字符串?

    注意 如果这是一个非常简单的问题 我很抱歉 但我对代码的格式有点强迫症 我有一个类 它有一个函数返回一个字符串 该字符串将构成电子邮件的正文 我希望该文本经过格式化 以便在电子邮件中看起来正确 但也不会让我的代码看起来很时髦 这就是我的意思
  • 核心数据对象唯一ID

    我想向我的托管对象实体模型添加一个唯一的 ID 字段 我知道核心数据不使用 ID 关系 但这是不同的 我需要一种将线程安全数据传递给不同线程的方法 以便新线程可以从该数据中获取托管对象 它可以是任何格式 但最好只是单个对象 变量 值 我可以
  • SQL 错误:ORA-00907:缺少右括号

    我正在使用 Oracle SQL Developer 使用以下命令创建一个基本表 CREATE TABLE chartered flight flight no NUMBER 4 PRIMARY KEY customer id FOREIG
  • 创建仅包含给定类的对象的数组

    好的 我有下面的代码 Objective C FYI 我想知道是否要创建一个 NSMutableArrayc data对象 我该怎么做呢 这有点像声明一个List