从 self 创建 NSMutableString 时出现 NSString+Extension 警告

Posted

技术标签:

【中文标题】从 self 创建 NSMutableString 时出现 NSString+Extension 警告【英文标题】:NSString+Extension warning when creating a NSMutableString from self 【发布时间】:2013-03-04 12:55:53 【问题描述】:

在我创建的 iphone 应用程序和 NSString 的扩展类中。

NSString+Extensions.m

在其中一种方法中,我需要将字符串转换为 NSMutableString。

我试过用这个:

NSMutableString * stringToManipulate = [NSMutableString stringWithString:self];

但它发出警告:

Incompatible pointer types sending 'const Class' to parameter of type 'NSString *'

据我所知,self 是对我调用该方法的字符串的引用,对吧?那么为什么它不应该是 NSString* 类型呢?知道我可以在 self 上使用常用的 NSString 方法。

对这个问题有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

检查该方法是声明为类方法(带有 + 符号)还是实例方法(带有 - 符号)。如果是第一种情况,编译器警告是正常的。然后将方法转为实例一

【讨论】:

是的,它是使用 + 符号声明的。无论如何,我可以在不将其更改为 - 的情况下完成这项工作?谢谢 不。类方法中的 self 是对类的引用,因此没有提供实例值。如果要使用实际值,只需实例化字符串,然后在其中调用 jnstance 方法。 对不起,我明白你的意思了。是的,就是这样,谢谢。我以为我必须更改 NSString+Extensions.m 名称中的 + :) 但你的意思是在方法中。抱歉,太晚了,我要睡觉了:)【参考方案2】:

在 Objective-C 中,当您在类方法中调用 self 时,它会引用类对象。对于NSString 类方法,调用self 与调用[NSString 类] 相同。

所以,你的行是一样的:

NSMutableString * stringToManipulate = [NSMutableString stringWithString:[self class]];

如果您将方法从类一(+ 符号)更改为对象一(- 符号),它会起作用,但您必须以不同的方式调用它(来自 NSString 对象)。

如果您想进一步解释,您可以发布整个方法声明吗? 您还可以查看 NSObject 协议参考以获取有关 +class 方法的更多信息:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

希望这会有所帮助,

【讨论】:

以上是关于从 self 创建 NSMutableString 时出现 NSString+Extension 警告的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 NSMutableString 数据并将其放在不同的字符串中? [关闭]

OC NSMutableString的使用

OC系列foundation Kit基础-NSMutableString

不可变字符串 NSString与可变字符串 NSMutableString

论NSString和NSMutableString 属性声明中copy/retain区别

如何用 NSMutableString 附加 NSMutableString?