2014-10-17 84 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:)時,所有內容都將按預期工作。