我正在学习alloc和init,但我不明白它应该是什么意思。他们给出了
的例子NSString *emptyString = [[NSString alloc] init];
NSArray *emptyArray = [[NSArray alloc] init];
NSDictionary *emptyDictionary = [[NSDictionary alloc] init];
我不知道它甚至会被用于什么。
接下来我必须使用stringWithString并执行此操作。没有任何线索在这里发生。有人可以帮助我,但可以理解/轻松解释它。谢谢
NSString *firstName = @"Daniel";
NSString *copy = [[NSString alloc] stringWithString:firstName];
NSLog(@"%@ is a copy of %@", copy, firstName);
答案 0 :(得分:1)
第一点:
如果您熟悉C ++代码,那么在创建对象时,基本上您可以按如下方式创建该类的新实例:
ClassA object1= new ClassA();
new
只是目标-C中的alloc+init
ClassA *object1 = [[ClassA alloc] init];
第二点:
[NSString stringWithString:@"some string"]
相当于
[[NSString alloc] initWithString:@"some string"]
以下是更多信息:
alloc :NSObject的类方法。返回接收类的新实例。
init :NSObject的实例方法。由子类实现,在分配了内存之后立即初始化一个新对象(接收者)。
new :NSObject的类方法。分配接收类的新实例,向其发送init消息,并返回初始化对象。
发布:NSObject委托的实例方法。减少接收者的参考计数。
autorelease :NSObject委托的实例方法。将接收器添加到当前自动释放池。
保留:NSObject委托的实例方法。增加接收者的引用计数。
copy :NSObject委托的实例方法。返回一个新实例,它是接收者的副本。
总而言之,我们可以说
alloc 与init
一起使用新 = alloc + init
答案 1 :(得分:1)
创建空数组和字典有点奇怪;通常你只能使用他们的可变版本。我想空字符串可以用于与其他字符串对象进行比较,但即便如此,使用@""
似乎更容易阅读。
alloc
是一个类方法,为适当类的对象分配空间。 init
是一个实例方法,它初始化该新实例,以便它可以作为该类的对象正确运行。
stringWithString
的使用不正确;你不应该在alloc
使用它。类似的东西:
NSString *copy = [firstName copy];
会更合适。