gpt4 book ai didi

objective-c - objective-c "Did you forget to nest alloc and init?"

转载 作者:太空狗 更新时间:2023-10-30 03:48:05 26 4
gpt4 key购买 nike

我刚刚开始攀登 Objective C 学习曲线(使用 Nerd Ranch iOS 编程书籍)。

根据我从其他语言中了解到的有关在一行中“嵌套”多个执行的信息,我认为我可以更改:

NSString* descriptionString = [[NSString alloc] initWithFormat:@"%@", possesionName] 

两行版本:

NSString* descriptionString = [NSString alloc];
[descriptionString initWithFormat:@"%@", possesionName]

但似乎第二次尝试引发了异常

2012-01-22 18:25:09.753 RandomPossessions[4183:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -length only defined for abstract class.  Define -[NSPlaceholderString length]!'

有人可以帮助我理解我到底做错了什么吗?非常感谢。

附言。如果这是 Objective C 消息的工作方式,并且您必须在一行中进行 alloc 和 init,请告诉我 - 我假设这只是一组函数,可以一次执行两个,也可以一个接一个地执行。

最佳答案

两个版本之间的一个重要区别(它们并不完全相同)是,在第一个版本中,您使用 initWithFormat 的结果作为变量 descriptionString,而您使用第二个 alloc 的结果。如果您将代码更改为

NSString* descriptionString = [NSString alloc];
descriptionString = [descriptionString initWithFormat:@"%@", possesionName]

一切都会好起来的。指定由 alloc 返回的对象在某些 init 方法被调用并且 init 可能返回一些东西之前不应被视为已初始化和起作用别的。

关于objective-c - objective-c "Did you forget to nest alloc and init?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com