为啥创建NSString实例时没有星号[关闭]
Posted
技术标签:
【中文标题】为啥创建NSString实例时没有星号[关闭]【英文标题】:Why no asterisk sign when creating instance of NSString [closed]为什么创建NSString实例时没有星号[关闭] 【发布时间】:2013-12-20 07:22:16 【问题描述】:NSString listOfNames = @"..."; // a long list of names
NSString name = @"Ward";
NSRange match = [listOfNames rangeOfString:name];
if (match.location == NSNotFound)
NSLog(@"No match found!");
// Other actions to be taken
else
NSLog(@"Match found!");
// Other actions to be taken
为什么第一、二、三行代码不用星号这样
NSString *listOfNames = @"...";
NSString *name = @"Ward";
NSRange *match = [listOfNames rangeOfString:name];
【问题讨论】:
你真的试过编译这段代码吗?您可能会发现它不起作用。顺便说一句,NSRange
不是一个 Objective-C 类,所以它实际上不需要*
。
试试这个***.com/questions/1172600/…
对不起,这是书籍错误,不,我没有尝试运行代码,因为我一直认为书籍是正确的。下次问任何问题之前,我会尝试运行代码。对不起。
请分享书名和作者,以免其他学习者最终从该书/作者那里学习。
【参考方案1】:
NSString* str = [NSString stringWithString:@"Blah..."];
注意NSString
后面的*
。你在这里工作目标 C 所以指向对象的指针!
【讨论】:
【参考方案2】:NSString listOfNames = @"..."; // a long list of names
NSString name = @"Ward";
NSRange match = [listOfNames rangeOfString:name];
前两行正在创建NSString
的对象。 NSString
是NSObject
的子类,所有NSObject
及其子类都应该有*
(与之关联的指针符号)。
虽然NSRange
是一个结构不在NSObject
@ 的继承链中,因此不需要指针符号,但在某些情况下您也可以指向 NSRange。
*你上面的代码会出现编译错误。
您需要将其用作:
NSString *listOfNames = @"..."; // a long list of names
NSString *name = @"Ward";
NSRange match = [listOfNames rangeOfString:name];
【讨论】:
为什么 NSRange 不需要星号? 如果您希望可以创建 nsrange 的指针,但您真的需要该指针吗?大多数情况下,您直接需要该值。【参考方案3】:我认为我们无法执行此代码,如果执行此代码会出错。
【讨论】:
【参考方案4】:这是我在尝试做同样的事情时通常会看到的。 XCode 会自动提示您在属性名称前添加“*”。
【讨论】:
【参考方案5】:通常在 Cocoa 对象中,你总是声明一个指针,所以你总是使用星号。您不能将对象本身放入变量中;你总是处理一个指向对象的指针。
对于其他对象 如果变量包含的对象,那么你不要使用星号,因为你没有在其中放置一个指针。如果它包含一个指针,那么你确实用星号声明它。
【讨论】:
等一下,您刚才说我们不能将对象本身放入变量中,但在第二段中您说变量包含对象。以上是关于为啥创建NSString实例时没有星号[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我的 OpsWorks 实例在关闭五分钟后自行启动 - 为啥?
为啥对函数的 VLA 数组参数使用星号“[*]”而不是整数?