Я кодирую всплывающий экран, который будет отображаться, если значение mulValue
в настройках равно nil
. Вот код:
#import "FirstViewController.h"
@implementation FirstViewController
@synthesize myHelpfile = ivHelpfile; //UIAlertView
@synthesize myAboutfile = ivAboutfile; //UIAlertView
@synthesize myNoarea = ivNoarea; //UIAlertView
@synthesize myMap = ivMap; //UIImageView
@synthesize myAreapick = ivAreapick; //UIActionSheet
@synthesize myAdvancedmode = ivAdvancedmode; //NSString
@synthesize myAreaset = ivAreaset; //NSString
@synthesize myAreaarray = ivAreaarray; //NSArray
@synthesize appSettingsViewController, settingsViewController;
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Wildlife";
NSString *area = [[NSUserDefaults standardUserDefaults] stringForKey:@"mulValue"];
[self setMyAreaset:area];
if ([self myAreaset] == nil) { //check if any region is selected. If not, push UIActionsheet
NSArray *array = [[NSArray alloc] initWithObjects: // creating array for different regions
[NSString stringWithString:@"Region 1"],
[NSString stringWithString:@"Region 2"],
[NSString stringWithString:@"Region 3"],
[NSString stringWithString:@"Region 4"],
[NSString stringWithString:@"Region 5"],
[NSString stringWithString:@"Region 6"],nil];
[self setMyAreaarray:array];
[array release], array = nil;
NSLog(@"Built areaselectArray");
NSLog(@"Values of areaselectArray are %@",[self myAreaarray]);
UIActionSheet *areaselect = [[UIActionSheet alloc] initWithTitle:@"Select your current area" //creation of popup Area Selection
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
[self setMyAreapick:areaselect];
[areaselect release], areaselect = nil;
int countarray = [[self myAreaarray] count];
for (int i = 0; i < countarray; i++) { //building list from array
[[self myAreapick] addButtonWithTitle:[[self myAreaarray] objectAtIndex:i]];
}
[[self myAreapick] addButtonWithTitle:@"Cancel"];
[self myAreapick].cancelButtonIndex = countarray;
[[self myAreapick] showInView:self.view];//show the general UIActionSheet instance
NSLog(@"Out of viewDidLoad");
}
else {
NSLog(@"Area is %@, no need for areaselectArray",area);
}
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger )buttonIndex
{
int countarray = [[self myAreaarray] count];
if (buttonIndex != countarray) { //cancel button is at countarray, so for anything that is not cancel, do:
NSString *area = [[self myAreaarray] objectAtIndex:(buttonIndex)];
[self setMyAreaset:area];
[[NSUserDefaults standardUserDefaults] setObject:[self myAreaset] forKey:@"mulValue"];
[[NSUserDefaults standardUserDefaults] synchronize]; //sync
NSLog(@"Released areaselectArray");
}
else {
}
}
И в моем FirstViewController.h у меня есть:
@interface FirstViewController : UIViewController <UIActionSheetDelegate, IASKSettingsDelegate, UIAlertViewDelegate> {
UIAlertView *ivHelpfile;
UIAlertView *ivAboutfile;
UIAlertView *ivNoarea;
UIActionSheet *ivAreapick;
UIImageView *ivMap;
NSString *ivAdvancedmode;
NSString *ivAreaset;
NSArray *ivAreaarray;
}
@property(nonatomic, retain) UIAlertView *myHelpfile;
@property(nonatomic, retain) UIAlertView *myAboutfile;
@property(nonatomic, retain) UIAlertView *myNoarea;
@property(nonatomic, retain) UIActionSheet *myAreapick;
@property(nonatomic, retain) UIImageView *myMap;
@property(nonatomic, copy) NSString *myAdvancedmode;
@property(nonatomic, copy) NSString *myAreaset;
@property(nonatomic, retain) NSArray *myAreaarray;
Когда я запускаю свое приложение в симуляторе с запущенными инструментами, я получаю утечку памяти всякий раз, когда прокручиваю список строк (как построено [self myAreaarray]
) и отпускаю палец. Странно то, что в тот момент он больше ничего не делал. Основной вид загружен, но было бы странно, что это вызвало бы утечку памяти при прокрутке списка.
Утечки в инструментах следующие:
_NSCFType 48 байтов CoreGraphics CGTypeCreateInstanceWithAllocator
UIDeviceWhiteColor 16 байтов UIKit + [UIColor allocWithZone:]
Когда я снова прокручиваю список, появляется больше таких ошибок. Похоже, что я что-то выделяю, а не выпускаю (пока прокручиваю список?), Но на данный момент не могу найти это.
Буду признателен за любую помощь!