Obj-C - 检查传递给方法的NSString是否等于先前调用的最佳方法?

时间:2014-03-13 20:10:23

标签: ios iphone objective-c

我是Objective-C的新手,我正在尝试确定传递给my方法的NSString是否与之前传递给同一方法的NSString相同。

有一种简单的方法吗?

4 个答案:

答案 0 :(得分:2)

将字符串存储为类的实例变量,每次调用该方法时,比较实例并替换为新参数。

答案 1 :(得分:2)

如果您希望在每个班级实例(而不是全局)中执行此操作:

@interface MyClass : NSObject

- (void)myMethod:(NSString *)value;

@end

@interface MyClass ()

@property (copy, nonatomic) NSString *value;

@end

@implementation MyClass

- (void)myMethod:(NSString *)value
{
    if ([self.value isEqualToString:value])
    {
        // Values are the same!
    }
    else
    {
        self.value = value;
    }
}

@end

答案 2 :(得分:0)

只是详细说明@Wain说的话:

添加实例变量:

@interface ViewController ()
{
    NSString * lastString;
}

然后在你的方法中:

- (void) methodWithString:(NSString *)string {
    if ([string isEqualToString:lastString]) {
        NSLog(@"Same String");
    }
    else {
        NSLog(@"New String");
        lastString = string;
    }
}

答案 3 :(得分:0)

主题的变体大多数答案如下:如果您希望对您的类每个实例执行此操作,那么您可以使用实例变量。但是,由于这是特定于您的方法的内容,因此您不希望在任何接口中声明此变量,并且最近的编译器通过在实现中启用实例变量声明来帮助您。例如:

@implementation MyClass
{
   NSString *methodWithString_lastArgument_; // make it use clear
}

- (void) methodWithString:(NSString *)string
{
   if ([string isEqualToString:methodWithString_lastArgument_])
   {
      // same argument as last time
      ...
   }
   else
   {
      // different argument
      isEqualToString:methodWithString_lastArgument_ = string.copy; // save for next time
      ...
   }
}

(以上假设为ARC。)

string.copy[string copy]的简写,可以处理可变字符串 - 如果方法传递NSMutableString,那么这将复制其为(不可变)NSString。这可以保护方法免受调用之间可变字符串更改值的影响。

如果要在全局的基础上而不是按实例执行此操作,可以在方法中声明static变量,从而将其完全隐藏在方法之外:< / p>

- (void) methodWithString:(NSString *)string
{
   static NSString *lastArgument = nil; // declare and init private variable

   if ([string isEqualToString:lastArgument])
   {
      // same argument as last time
      ...
   }
   else
   {
      // different argument
      isEqualToString:lastArgument = string.copy; // save for next time
      ...
   }
}

HTH