【问题标题】:Releasing NSArray after parsing NSString correctly in objective-c在objective-c中正确解析NSString后释放NSArray
【发布时间】:2023-03-08 09:07:01
【问题描述】:

我想知道以下代码是否泄漏:

bool IsWordOf(NSString* myString, NSString* myWord)
{
    NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];
    [separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];

    NSArray *parse_array = [myString componentsSeparatedByCharactersInSet:separators];
    parse_array = [parse_array filteredArrayUsingPredicate:noEmptyStrings];

    //NSLog(@"%@", parse_array);

    bool identicalStringFound = NO;
    for (NSString *someString in parse_array) 
    {
        if( [someString caseInsensitiveCompare:myWord] == NSOrderedSame )
        {
            identicalStringFound = YES;
            break;
        }
    }

    return identicalStringFound;    
}

我必须释放数组的所有对象([parse_array releaseAllObjects])然后释放它([parse array release])吗?

谢谢。

【问题讨论】:

    标签: objective-c memory-management nsarray


    【解决方案1】:

    不,你没有分配或保留 parse_array,所以你不能释放它。

    更一般地说,您不负责释放存储在数组中的对象,或者您没有明确获得所有权的任何其他对象(通过 +alloc、-retain、-copy、+new...)。如果数组保留了对象,则数组负责正确释放它们。

    【讨论】:

      【解决方案2】:

      您的代码不会泄漏。

      此外,您的代码可能会被压缩。我觉得奇怪的是您使用NSPredicate 过滤数组的一部分,然后再次循环以查找其他内容。为什么不同时使用谓词呢?

      BOOL IsWordOf(NSString* myString, NSString* myWord)
      {
          NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];
          [separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
          NSArray *parse_array = [myString componentsSeparatedByCharactersInSet:separators];
      
          NSPredicate *search = [NSPredicate predicateWithFormat:@"SELF.length > 0 AND SELF ==[cd] %@", myWord];
          NSArray *filtered = [parse_array filteredArrayUsingPredicate:search];
          return [filtered count] > 0;   
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 2018-04-27
        • 2012-02-12
        相关资源
        最近更新 更多