2014-10-17 50 views
0

我看了一段关于ios7编程的视频,并在下面看到了一段代码。NSrange在这里工作?

我无法真正了解变量范围如何在这里工作。

我们创建一个NSrange变量范围,并且永远不会给它一个值,所以我认为&范围指针应该返回nil。

那么如何在有效范围内使用以及range.location和range.length中的值是什么?

非常感谢你的帮助!

- (NSMutableAttributedString *)charactersWithAttribute:(NSString *)attributeName 
{ 
    NSMutableAttributedString *characters = [[NSMutableAttributedString alloc] init]; 

    int index = 0; 

    while(index < self.textToAnalyze.length) 
    { 
     NSRange range; 
     id value = [self.textToAnalyze attribute:attributeName atIndex:index  effectiveRange:&range]; 
     if(value) 
     { 
      [characters appendAttributedString: [self.textToAnalyze attributedSubstringFromRange:range]]; 
      index = range.location+range.length; 
     } 
     else{ 
      index++; 
     } 
    } 

    return characters; 
} 
+0

查看'attribute:atIndex:effectiveRange:'的代码。注意它在'NSRange'指针中传递的内容。 – rmaddy 2014-10-17 18:15:17

回答

0

NSRange不是一个对象,它是我们严格的,所以声明它使用默认值进行设置。当你声明它时它不返回零。

2

声明NSRange range在堆栈上分配内存(在本地范围内)。该内存与&range访问的内存地址绑定。将此内存地址传递给方法时,该方法使用该地址作为其分配值的位置。方法返回后,与range相关联的内存现在将被分配值,因此当您访问它们(将它们发送到attributedSubstringFromRange:)时,所有内容都将按预期工作。