NSRange奇怪的行为

时间:2011-03-11 15:56:08

标签: ios nsrange

我的设备上有奇怪的NSRange行为(iPhone iOS 4.3)。此代码在设备和模拟器上具有不同的行为。

for (Location *location in locationArray)
{
    NSRange range1 = [location.name rangeOfString:searchText options:NSCaseInsensitiveSearch];
    NSRange range2 = [location.streetAddress rangeOfString:searchText options:NSCaseInsensitiveSearch];
    NSRange range3 = [location.postalCode rangeOfString:searchText options:NSCaseInsensitiveSearch];

if (range.length1 > 0 | range2.length > 0 | range3.length > 0)
    [self.filteredList addObject:location];
}

如果某些属性的nil值为range.lenght,则该属性在设备上等于2,在模拟器中为零。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

The Objective-C Programming Language

  

从邮件返回的值   零也可能有效:

     
      
  • 如果方法返回一个对象,那么   发送给nil的消息返回0(nil)。   例如:Person * motherInLaw =   [[aPerson配偶]母亲];如果   这里的配偶对象是零,然后是母亲   被发送到nil并且方法返回   零。
  •   
  • 如果方法返回任何指针   type,任何大小较小的整数标量   大于或等于sizeof(void *),a   浮动,双重,长双,或   很长,然后发送给nil的消息   返回0.
  •   
  • 如果方法返回a   结构,由Mac OS X ABI定义   函数调用指南将被退回   寄存器,然后发送给nil的消息   为每个字段返回0.0   结构。其他结构数据类型将   不要用零填充
  •   
  • 如果   方法返回除了之外的任何内容   上述价值类型,回报   发送给nil的消息的值是   未定义。
  •   

适用于Mac OS X,但我认为如果消息目标为零,则不应该依赖返回的struct值。