2012-05-24 7 views
0

У меня есть несколько предупреждений в моем проекте (XCode 4.1, 4.3.1), главным образом в LIBS с открытым исходным кодом enter image description hereУдалить предупреждения и утечки памяти


Reachability.h:
+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress;

ASIAuthenticationDialog. м:

- (UIViewController *)presentingController 
{ 
    if (!presentingController) { 
     presentingController = [[ASIAutorotatingViewController alloc] initWithNibName:nil bundle:nil]; 

     // Attach to the window, but don't interfere. 
     UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0]; 
     [window addSubview:presentingController.view]; 
     [[presentingController view] setFrame:CGRectZero]; 
     [[presentingController view] setUserInteractionEnabled:NO]; 
    } 

    return presentingController; 
} 

ASIDownloadCache:

- (void)setDefaultCachePolicy:(ASICachePolicy)cachePolicy 
{ 
    [[self accessLock] lock]; 
    if (cachePolicy == ASIDefaultCachePolicy) { 
     defaultCachePolicy = ASIReloadIfDifferentCachePolicy; 
    } else { 
     defaultCachePolicy = cachePolicy; 
    } 
    [[self accessLock] unlock]; 
} 


NSDate *expiryDate = [fetchDate addTimeInterval:maxAge]; - addTimeInterval осуждается


ASIHTTPRequest.m:

- (void)setDelegate:(id)newDelegate 
{ 
    [[self cancelledLock] lock]; 
    delegate = newDelegate; 
    [[self cancelledLock] unlock]; 
} 


ASINetworkQueue.m:

- (void)setUploadProgressDelegate:(id)newDelegate 
{ 
    uploadProgressDelegate = newDelegate; 
    [self resetProgressDelegate:newDelegate]; 

} 


И есть утечки памяти, главным образом в Libxml: enter image description here

Я использую 'useyourloaf' RSS Feed разборе пример:
Feed.h:

#import <Foundation/Foundation.h> 
#import "TFHpple.h" 

@class ASIHTTPRequest, Channel; 

@interface Feed : NSObject <NSXMLParserDelegate> { 

    NSURL *feedURL; 
    ASIHTTPRequest *feedRequest; 

    Channel *feedChannel; 
    NSMutableArray *feedPosts; 

    id currentElement; 
    NSMutableString *currentElementData; 

    TFHpple *htmlParser; 
    NSArray * elements; 

} 

@property (nonatomic, copy) NSURL *feedURL; 
@property (nonatomic, retain) ASIHTTPRequest *feedRequest; 
@property (nonatomic, retain) Channel *feedChannel; 
@property (nonatomic, retain) NSMutableArray *feedPosts; 
@property (nonatomic, assign) id currentElement; 
@property (nonatomic, retain) NSMutableString *currentElementData; 


- (id)initWithURL:(NSURL *)feedURL; 
- (void)refresh; 

extern NSString *kFeederReloadCompletedNotification; 
extern NSString *kFeederReloadFailedNotification; 

@end 


Feed.m:

#import "Feed.h" 
#import "Channel.h" 
#import "Post.h" 
#import "ASIHTTPRequest.h" 
#import "NSString+HTML.h" 

@implementation Feed 

@synthesize feedURL; 
@synthesize feedRequest; 
@synthesize feedChannel; 
@synthesize feedPosts; 
@synthesize currentElement; 
@synthesize currentElementData; 

NSString *kFeederReloadCompletedNotification = @"kFeederReloadCompletedNotification"; 
NSString *kFeederReloadFailedNotification = @"kFeederReloadFailedNotification"; 

#pragma mark - 
#pragma mark === Initialization and release === 
#pragma mark - 

-(id)initWithURL:(NSURL *)sourceURL 
{ 

    if (self = [super init]) 
    { 

     self.feedURL = sourceURL; 
     self.feedPosts = [[NSMutableArray alloc] init]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 

    [currentElementData release]; 
    [feedPosts release]; 
    [feedChannel release]; 
    [feedRequest release]; 
    [feedURL release]; 

    [super dealloc]; 
} 

#pragma mark - 
#pragma mark === ASIHTTPRequest delegates === 
#pragma mark - 

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 

    NSData *responseData = [request responseData]; 

    //htmlParser = [[TFHpple alloc] init]; 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:responseData]; 
    [parser setDelegate:self]; 

    [parser parse]; 

    if ([parser parse]) 
    { 

     [[NSNotificationCenter defaultCenter] 
     postNotificationName:kFeederReloadCompletedNotification 
     object:nil]; 

    } 

    [parser release]; 
} 

- (void)requestFailed:(ASIHTTPRequest *)request 
{ 
    NSError *error = [request error]; 
    UIAlertView *requestAlert = [[UIAlertView alloc] initWithTitle:[error localizedDescription] message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [requestAlert show]; 
    [requestAlert release]; 
    requestAlert = nil; 

    [self performSelector:@selector(refresh) withObject:nil afterDelay:30.0]; 

    [[NSNotificationCenter defaultCenter] 
         postNotificationName:kFeederReloadFailedNotification 
         object:nil]; 
} 

#pragma mark - 
#pragma mark === NSXMLParserDelegate methods === 
#pragma mark - 

static NSString * const kChannelElementName = @"channel"; 
static NSString * const kItemElementName = @"item"; 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
       namespaceURI:(NSString *)namespaceURI 
       qualifiedName:(NSString *)qName 
       attributes:(NSDictionary *)attributeDict 
{ 

    if ([elementName isEqualToString:kChannelElementName]) 
    { 

     Channel *channel = [[Channel alloc] init]; 
     self.feedChannel = channel; 
     self.currentElement = channel; 
     [channel release]; 
     return;  
    } 

    if ([elementName isEqualToString:kItemElementName]) 
    { 
     Post *post = [[Post alloc] init]; 
     [feedPosts addObject:post]; 
     self.currentElement = post; 
     [post release]; 
     return;  
    } 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if (currentElementData == nil) 
    { 
     self.currentElementData = [[NSMutableString alloc] init]; 
    } 

    [currentElementData appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
       namespaceURI:(NSString *)namespaceURI 
       qualifiedName:(NSString *)qName 
{ 

    SEL selectorName = NSSelectorFromString(elementName); 
    if ([currentElement respondsToSelector:selectorName]) 
    {  
     if(([currentElement isKindOfClass:[Post class]]) && ([elementName isEqualToString:@"description"])) 
     { 
      if(htmlParser) 
      { 
       [htmlParser release]; 
       htmlParser = nil; 
      } 
      htmlParser = [[TFHpple alloc] initWithHTMLData:[[[currentElementData stringByDecodingHTMLEntities] stringByRemovingNewLinesAndWhitespace] dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]]; 
      NSArray *img_array = [htmlParser searchWithXPathQuery:@"//img"]; 
      if(img_array.count) 
      { 
       NSURL *img_url = [NSURL URLWithString:[[img_array objectAtIndex:0] objectForKey:@"src"]]; 
       [currentElement setValue:img_url forKey:@"imageURL"]; 
      } 
      else 
      { 
       [currentElement setValue:nil forKey:@"imageURL"]; 
      } 
      NSArray *youtube_string_array = [htmlParser searchWithXPathQuery:@"//embed"]; 
      if(youtube_string_array.count) 
      { 
       NSString *youtube_string = [[youtube_string_array objectAtIndex:0] objectForKey:@"src"]; 
       [currentElement setValue:youtube_string forKey:@"youtubeString"]; 
      } 
      else 
      { 
       [currentElement setValue:nil forKey:@"youtubeString"]; 
      } 
     } 

     if(([currentElement isKindOfClass:[Post class]]) && ([elementName isEqualToString:@"pubDate"])) 
     { 
      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
      dateFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]autorelease]; 
      [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
      [dateFormatter setDateFormat:@"eee, dd MMM yyyy HH:mm:ss ZZZ"]; 

      NSString *date_string = [[currentElementData stringByConvertingHTMLToPlainText]stringByRemovingNewLinesAndWhitespace]; 

      NSDate *dateFromString = [dateFormatter dateFromString:date_string]; 

      //[dateFormatter setDateFormat:@"eee, dd MMM yyyy HH:mm"]; 
      [dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
      [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
      dateFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"]autorelease]; 

      date_string = [dateFormatter stringFromDate:dateFromString]; 
      [currentElement setValue:date_string forKey:elementName]; 
      [dateFormatter release]; 
      dateFormatter = nil; 
     } 
     else if(([currentElement isKindOfClass:[Post class]]) && ([elementName isEqualToString:@"link"])) 
     { 
      [currentElement setValue:[[currentElementData stringByConvertingHTMLToPlainText] stringByRemovingNewLinesAndWhitespace] forKey:elementName]; 
     } 
     else 
     { 
      [currentElement setValue:[[currentElementData stringByConvertingHTMLToPlainText] stringByRemovingNewLinesAndWhitespace] forKey:elementName];  
     } 
    } 

    [currentElementData release]; 
    self.currentElementData = nil; 
} 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { 

// NSString *info = [NSString stringWithFormat:@"Error %i, Description: %@, Line: %i, Column: %i", 
//     [parseError code], 
//     [[parser parserError] description], 
//     [parser lineNumber], 
//     [parser columnNumber]]; 

    //NSlog(@"RSS Feed Parse Error: %@", info); 
} 

#pragma mark - 
#pragma mark === instance methods === 
#pragma mark - 

- (void)refresh { 

    self.feedRequest = [ASIHTTPRequest requestWithURL:feedURL]; 

    [feedPosts removeAllObjects]; 
    [feedRequest setDelegate:self]; 
    [feedRequest startAsynchronous]; 

} 

@end 

Может ли кто-нибудь помочь мне удалить эти предупреждения и m утечки emory? Любая помощь будет признательна!

+0

для ASIHTTPRequest: загрузить новую сборку из GitHub: https://github.com/pokeb/a si-http-request – CarlJ

+0

Да, спасибо, это помогло мне удалить все предупреждения! ;] Но все равно не повезло с утечками памяти – Aft3rmath

+0

, если вы посмотрите на экран ваших приборов. Я не вижу никакого утечки памяти, который отвечает на ваш App GrindFM – CarlJ

ответ

3

Для вопросов достижимости:

В верхней части Reachability.h файла добавьте строку

struct sockaddr_in; 

, чтобы избавиться от первого набора предупреждений ...

Первый несколько строк моего файла:

#import <Foundation/Foundation.h> 
#import <SystemConfiguration/SystemConfiguration.h> 

struct sockaddr_in; 

typedef enum { 
    NotReachable = 0, 
    ReachableViaWiFi, 
    ReachableViaWWAN 
} NetworkStatus; 
+1

Да, для достижения этой цели это помогло – Aft3rmath