【问题标题】:Create Instances During Runtime in Objective C在 Objective C 运行时创建实例
【发布时间】:2016-02-04 07:39:24
【问题描述】:

到目前为止,我有以下课程:

@interface BRPerson : NSObject
@property (nonatomic) NSString *name;
@property (nonatomic) NSString *address;

-(instancetype)initWithName:(NSString*)name andAddress:(NSString*)address;

@implementation BRPerson

-(instancetype)initWithName:(NSString*)name andAddress:(NSString*)address{
    self.name = name;
    self.address = address;
    return self;
}
@end

我的主要是:

#import <Foundation/Foundation.h>
#import "BRPerson.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *filepath = [[NSBundle mainBundle] pathForResource:@"Directory"
                                                             ofType:@"txt"];
     }
     return 0;
 }

Directory.txt 文件是我创建的一个普通文件,设置为:

name, address
name2, address2
name3, address3

我正在尝试编写一个程序,该程序读取名称和地址并创建 BRPerson 类的新实例,名称为实例名称。是否首先必须将其存储在 NSDictionary 中(名称为键,地址为值)?

感谢任何帮助。提前谢谢你。

【问题讨论】:

  • 为什么要使用 rtf 来处理纯文件? txt 用于纯文本。 rtf 用于富文本格式,而不是纯文本。

标签: objective-c runtime instances createinstance


【解决方案1】:

按照 Objective-C 的 pattern for initializers,执行以下操作:

-(id)initWithName:(NSString*)name andAddress:(NSString*)address{
    self = [super init];
    if (self) {
        _name = name;
        _address = address;
    }
    return self;
}

你也可以考虑提供一个方便的工厂方法,像这样:

+ (instancetype)personWithName:(NSString*)name andAddress:(NSString*)address {
    return [[self alloc] initWithName:name andAddress:address];
}

这样,构建实例的循环看起来就像 SDK 的许多部分:

NSMutableArray *persons = [@[] mutableCopy];
while (/* more input */) {
    NSString *name = // next name from input
    NSString *address = // next address from input

    BRPerson *person = [BRPerson personWithName:name andAddress:address];
    [persons addObject];
}
// here, the array persons will contain several BRPerson instances
// as specified by the input

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多