Objective c 更改NSString以不返回任何内容

Objective c 更改NSString以不返回任何内容,objective-c,cocoa,nsstring,Objective C,Cocoa,Nsstring,在我的应用程序运行的两个阶段,我将向以下方法发送NSString 我在代码编辑器或调试器中没有收到任何警告或错误,但当我记录输出(secondString)时,我只得到对象的内存地址 有什么我现在没在做的吗 - (NSString*)validateString { NSString *firstString = [NSString stringWithFormat:@"%@", self]; [firstString stringByAddingPercentEscapesUsingEncod

在我的应用程序运行的两个阶段,我将向以下方法发送NSString

我在代码编辑器或调试器中没有收到任何警告或错误,但当我记录输出(secondString)时,我只得到对象的内存地址

有什么我现在没在做的吗

- (NSString*)validateString
{
NSString *firstString = [NSString stringWithFormat:@"%@", self];
[firstString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSMutableString *secondString = [firstString mutableCopy];
[secondString replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:NSMakeRange([secondString length], 0)];

secondString = [NSString stringWithFormat:@"%@", secondString];
NSLog (@"%@ and %@", firstString, secondString);

return secondString;

[firstString release];
[secondString release];
}
我非常感谢你的帮助

谢谢, Ricky.

首先是一些评论: 1) 返回后的所有内容都不会执行,因此最后的to语句是无用的(死代码)。 2) 如果不是使用
+alloc
创建的,则可以假定
NSString
实例是自动删除的,因此不需要将
-release
消息发送到
firstString

Edit:正如Peter Hosey指出的,您必须释放通过
-mutableCopy
获得的字符串

回答你的问题:
-stringbyaddingpercentescapesusingencode:
返回指向新创建实例的指针,因此必须保存它

- (NSString*)validateString
{
NSString *firstString = [NSString stringWithFormat:@"%@", self];
firstString = [firstString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSMutableString *secondString = [firstString mutableCopy];
[secondString replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:NSMakeRange([secondString length], 0)];

 secondString = [NSString stringWithFormat:@"%@", secondString];
 NSLog (@"%@ and %@", firstString, secondString);

 [secondString release];

 return secondString;
 }
  • 如果需要字符串“%26”,则需要使用%%26
  • 你的射程是向后的
  • 您的返回太早,而且您不需要释放字符串

    • 啊,代码在很多层面上都是错误的

      下面是一个更简单的版本:

      - (NSString*)validateString {
        NSString *firstString = [self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *secondString = [firstString stringByReplacingOccurrencesOfString:@"&" withString:@"%%26" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [firstString length])];
      
        NSLog (@"%@ and %@", firstString, secondString);
      
        return secondString;
      }
      

      构造
      [NSString stringWithFormat:@“%@”,aString]
      是一个非常无用的语句,尤其是当您有可用的
      copy
      时。代码中还存在内存泄漏和崩溃(创建字符串的副本[+1 retain count],将自动释放字符串分配到同一变量[+0 retain count,原始字符串丢失和泄漏],然后释放自动释放字符串[自动释放池耗尽时崩溃]).

      以及@swegi关于StringByAddingPercentescapesusingEncoding所说的内容提问者确实需要释放从
      mutableCopy
      获得的字符串。返回应该是这里的最后一件事!之后的一切都不会被调用!