Objective c 传递数据集
这是我思考了很久的问题。我主要是一名.net开发人员,涉足iPhone和Mac的Objective-C 如何在objective-c中的方法之间发送“数据集”。例如,在C#中,您可以使用数据填充自定义类,并在自定义类的类型列表中传递它。例如,如果您有一个客户类,您只需执行以下操作:Objective c 传递数据集,objective-c,cocoa,macos,sqlite,Objective C,Cocoa,Macos,Sqlite,这是我思考了很久的问题。我主要是一名.net开发人员,涉足iPhone和Mac的Objective-C 如何在objective-c中的方法之间发送“数据集”。例如,在C#中,您可以使用数据填充自定义类,并在自定义类的类型列表中传递它。例如,如果您有一个客户类,您只需执行以下操作: List<Customer> customers = DataLayer.GetAllCustomers(); List customers=DataLayer.GetAllCustomers();
List<Customer> customers = DataLayer.GetAllCustomers();
List customers=DataLayer.GetAllCustomers();
我能看到如何在obj-c中实现这一点的唯一方法是用自定义对象填充NSArray?这是一种有效的做事方式吗?还有其他建议吗?我正在使用sqlite作为我想要返回的数据库/数据。您走对了方向 Cocoa的集合类都有可变和不可变的变体,它们是:
- NSArray:有序,可以多次包含对象
- NSDictionary:无序,从键映射到值,复制键
- NSSet:无序,只能包含一个对象一次
- NSCountedSet:无序,可以多次包含对象
copy
属性,在@property
机制中对其进行编码:
// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end
这意味着,如果将可变数组传递给接受数组的对象,它将被复制,如果将该数组传递给其他对象,它将再次被复制。诀窍在于,“复制”一个不可变的对象实际上只是保留它,所以你只需要点击第一个拷贝。您可能希望在第一次创建副本,这样就不会将可变数组传递给其他对象,然后在传递到的任何对象后面对其进行变异
对于MacOSX上的Cocoa,我还强烈建议您查看核心数据。它是从.NET/ADO/etc使用的“数据集”模式的替代方案。对于核心数据,您不会“获取所有客户”,然后将收集的数据传递给其他人。相反,您可以查询您关心的客户,当您遍历所查询对象的关系时,其他对象将自动为您拉入
核心数据还提供了一些功能,如实体的可视化建模、自动生成属性getter和setter、对从一个模式版本到另一个模式版本的迁移进行细粒度控制等等。此外,您可能还需要在SQLLite周围寻找轻量级包装器,以便更轻松地从数据库创建对象。