Исправлено предупреждение о проблеме с памятью, когда утечка не может найти его

Я снимаю приведенный ниже код в контроллере представления.. Я исправляю проблему с памятью. Когда я закомментирую, представление действительно загружается, даже если требуется больше 80 МБ памяти, что я должен сделать, чтобы решить эту проблему. Я изменил все переменные с сильного на слабый.

@interface bookNowViewController :     UIViewController<GMSMapViewDelegate, UIGestureRecognizerDelegate>
@property (weak, nonatomic) IBOutlet UICollectionView *collectionViewBook;
@property (weak, nonatomic) IBOutlet GMSMapView *mapLoc;
@property (weak, nonatomic) IBOutlet UILabel *distanceLbl;
@property (weak, nonatomic) IBOutlet UILabel *rateLbl;
@property (weak, nonatomic) IBOutlet UICollectionView *collectionViewFacility;
@property (weak, nonatomic) IBOutlet UIView *contentView;
@property (weak, nonatomic) IBOutlet UIScrollView *mainScrollView;
@property (weak, nonatomic) IBOutlet UIImageView *animatedImages;//images with fading effect
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *facilityCollectionViewHight;
@property (weak, nonatomic) IBOutlet UILabel *noSportsAvailable;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *facilityLblHightConstant;
@property (weak, nonatomic) IBOutlet UILabel *stName;
@property (weak, nonatomic) IBOutlet UILabel *stAddress;
@property (weak, nonatomic) IBOutlet UIButton *btnI;
@property (weak, nonatomic) IBOutlet UIButton *moreBt;
@property (weak, nonatomic) IBOutlet UIButton *bookNowBt;
@property (weak, nonatomic) IBOutlet UILabel *spRating;
@property (weak, nonatomic) IBOutlet UIView *iNewView;
@property (weak, nonatomic) IBOutlet UILabel *infoLabel;
@property (weak, nonatomic) IBOutlet UILabel *lblIText;
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (weak, nonatomic) IBOutlet UILabel *confirmationLblText; 

и в.m файле

@interface bookNowViewController (){
NSMutableArray *savedList, *stadiumAddress, *stadiumLatitude, *stadiumLongitude, *stadiumId, *stadiumImages, *stadiumPrice, *stadiumRating, *stadiumName, *savedImages, *listFacility, *facility, *vendorId, *vendorName, *sportsName;

NSString *post_id2, *postIndex2, *combineData2, *STName;
NSString *raterName, *ratingValue, *raterImage, *comment;
NSInteger myInt;
UIButton *button;
UILabel *navLabel;
NSString *stadium_Id;
NSMutableArray *imageView;// animation images array
UIView  *hideView;
UITapGestureRecognizer *oneTap;
 NSUInteger jk;

}

  @end

и в viewdidload

 [NSTimer scheduledTimerWithTimeInterval:5.0 target:self
                               selector:@selector(swapImage2) userInfo:nil repeats:YES];

 [[NSUserDefaults standardUserDefaults] setObject: nil forKey: @"paymentTag"];
self.navigationController.navigationBar.hidden = NO;

stadium_Id = [[NSUserDefaults standardUserDefaults] valueForKey:@"stadium_Id"];
NSLog(@"%@", stadium_Id);
[ProgressHUD showSuccess:@"" Interaction:YES];
NSString *combined2 = stadium_Id;
NSArray* combineData = [[NSArray alloc]init];
combineData = [combined2 componentsSeparatedByString: @" "];
post_id2 = [combineData objectAtIndex:0];
[[NSUserDefaults standardUserDefaults] setObject: post_id2 forKey: @"stadiumid"];
NSLog(@"%@", post_id2);
postIndex2 = [ combineData objectAtIndex:1];
STName =[combineData objectAtIndex:2];
myInt = [postIndex2 integerValue];
NSLog(@"%ld", (long)myInt);

[self getStadiumDetail];
[self map2];

  savedImages = [[NSUserDefaults standardUserDefaults] valueForKey:@"sportsImage"];
  sportsName = [[NSUserDefaults standardUserDefaults] valueForKey:@"sportsName"];

if (savedImages.count<1) {
    _infoLabel.hidden = NO;
    _bookNowBt.hidden = YES;
}
else{
   _infoLabel.hidden = YES;
}

[_collectionViewBook reloadData];
[_collectionViewFacility reloadData];

//////////tap gesture
oneTap.numberOfTapsRequired=1;
oneTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap332)];
oneTap.delegate = self;

// [ProgressHUD showSuccess:@"" Interaction:YES];
self.btnI.layer.cornerRadius = self.btnI.frame.size.width/2;
[self.btnI.layer setBorderWidth:2.0];
[self.btnI.layer setBorderColor:[[UIColor grayColor] CGColor]];


_moreBt.layer.cornerRadius = 4.0f;
_bookNowBt.layer.cornerRadius = 4.0f;

_rateLbl.layer.borderColor = [UIColor lightGrayColor].CGColor;
_rateLbl.layer.borderWidth = 2.0f;
_rateLbl.layer.cornerRadius =_rateLbl.frame.size.width/2;
_rateLbl.clipsToBounds = YES;


_confirmationLblText.text = [[NSUserDefaults standardUserDefaults] valueForKey:@"savedPayText"];

1 ответ

  1. В конце концов, обнулите все изображения, которые вы объявили ранее.

  2. После каждого pushtoViewController nil ссылка, которую вы для него создали.

  3. Используйте @autoreleasepool.

  4. сохраняйте слабые ссылки для Outlets и назначайте любые сильные ссылки для nil** inviewWillDisapper: . Вы можете представить viewController модально как временное прерывание для получения важной информации от пользователя.

  5. Вместо создания новых MKMapView по мере необходимости в приложении, я добавил свойство mkMapView в свой AppDelegate и создавал его только при необходимости. После того, как он был создан, он навсегда живет в AppDelegate, и я использую этот единственный экземпляр везде, где это необходимо. Это действительно помогло уменьшить объем используемой памяти, так как я ранее создавал пару разных MKMapView, и оба довольно быстро прожигали память.

  6. Не используйте -imageNamed Я повторяю, никогда не используйте метод imageNamed, потому что он кэширует изображения. Используйте это вместо -imageNamed: (создайте метод в appDelegate и затем вызывайте его где угодно)

- (UIImage *) method4TakeImagesFromBundel: (NSString *) nameOfImage {NSString fileLocation = [[NSBundle mainBundle] pathForResource: nameOftheImage ofType: @ "png"]; UIImage yourImage = [[UIImage alloc] initWithContentsOfFile: fileLocation]; вернуть ваше изображение; }

  1. После получения изображения сожмите его и используйте:

NSData * imgData = UIImageJPEGRepresentation (rainyImage, 0.1 / сжатие, качество /);

  1. Вы можете дополнительно изменить его размер:
  • (UIImage *) imageWithImage: (UIImage *) image convertToSize: (CGSize) size {UIGraphicsBeginImageContext (size); [изображение drawInRect: CGRectMake (0, 0, size.width, size.height)]; UIImage * destImage = UIGraphicsGetImageFromCurrentImageContext ();
    UIGraphicsEndImageContext (); вернуть destImage; }
Другие вопросы по тегам