寻找客观的类似NSList的选项,(我知道之前有人问过),你能提供什么样的例子?

时间:2010-11-17 02:45:18

标签: objective-c arrays properties

这是我正在尝试从c#转换为目标c:

public class Television
{
     public string Name {get; set};
     public bool isOn {get; set};
     public int channelNum {get; set};
     public string channelName {get; set};
}

让我们说电视仙女去过我家,我不知道那里有多少台电视机。或者,我想让这段代码可以重复使用,因为每个人家里都有不同数量的电视机,我想在每个运行时都使用不同的数字。

 public List<Television> TVs = new List<Television>(4);

当我想,我可以说:

 TVs[3].channelNum = 34;
  1. 在目标c中,你如何将它放在数组/字典(哈希表)中?能给我举个例子?
  2. 如果我每次将新电视放入家中并创建一个新对象并访问其属性,这在内存上的效率是否比列表类更高效?看起来列表比创建4个数组更容易,不是吗?
  3. 有人可以给我一个例子,说明如果我打电话

    将如何使用它

    电视电视= [[电视分配]初始化];

    并使用了属性?

  4. 我可以在nsmutablearray中使用电视对象,只是在需要时将它们拉出来访问它们的属性,或者当它们发生变化时?

2 个答案:

答案 0 :(得分:3)

只是给你一个想法的东西(虽然它不是很可爱的代码)......

@interface Television : NSObject {
@private
    NSString *name;
    BOOL isOn;
    int channelNumber;
    NSString *channelName;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign, getter=isOn) BOOL on;
@property (nonatomic, assign) int channelNumber;
@property (nonatomic, copy) NSString* channelName;
@end

实行

@implementation Television
@synthesize name, on=isOn, channelNumber, channelName;
@end

用法

Television *tv1 = [[[Television alloc] init] autorelease];
tv1.name = @"TV Name";
tv1.on = YES;
tv1.channelNumber = 236;
tv1.channelName = "Channel 236";

// create a mutable array to use as a list
NSMutableArray *array = [NSMutableArray array];

// add tv1 to the array
[array addObject:tv1];

// add another one
[array addObject:[[[Television alloc] init] autorelease]];
[array objectAtIndex:1].name = @"Another name";

答案 1 :(得分:2)

我不明白你的第2点是什么意思(如果你有一个需要管理的项目的可变集合,一个可变数组就可以做,只需使用一个可变数组 - 即避免过早优化),但是其余的,这很简单:

NSMutableArray

NSMutableArray * televisions = [NSMutableArray array];
Television * thisTV = [[Television alloc] init];
[televisions addObject:thisTV];
[thisTV release];

// ...

[[televisions objectAtIndex:0] setChannelNumber:34];

NSMutableDictionary

NSMutableDictionary * televisionsByRoomName = [NSMutableDictionary dictionary];
Television * thisTV = [[Television alloc] init];
[televisionsByRoomName setObject:thisTV forKey:@"livingroom"];
[thisTV release];
// ...
[[televisionsByRoomName objectForKey:@"livingroom"] setChannelNumber:34];

所有这些以及更多内容都可以用于阅读Collections Programming Topics的低价,低价,这在介绍概念Cocoa文档中的许多地方都有提及。