我已經創建了我自己的scrollView並在該視圖上添加了不同的按鈕。這個類MyScrollView
是在ViewController上創建的。然後,我已經在iOS模擬器上測試了它,同時調用了「模擬內存警告」。但沒有任何反應 - 沒有在該MyScrollView
上調用dealloc。所以我檢查了不同代碼行上的retaincount。內存管理 - 多個按鈕和retaincount
不幸的是,所有的蘋果內存紀錄和不同的可可博客並沒有幫助我。 因此,這將是冷靜,如果你們中的一些開發者可以幫助我的..
MyScrollView.h
@interface MyScrollView : UIScrollView {
NSArray* photosThumb;
NSArray* photosFull;
NSMutableArray* photoItemsArray;
}
@property (nonatomic, retain) NSArray* photosThumb;
@property (nonatomic, retain) NSArray* photosFull;
@property (nonatomic, retain) NSMutableArray* photoItemsArray;
@end
MyScrollView.m
@implementation MyScrollView
@synthesize photoItemsArray, photosFull, photosThumb;
-(id) initArraySmall:(NSArray*) _photos
initArrayBig:(NSArray*) _photosBig{
self.photosThumb = _photos;
self.photosFull = _photosBig;
NSUInteger i, count = [self.photosThumb count];
self.photoItemsArray = [[NSMutableArray alloc] init];
for (i = 0; i < count; i++)
{
MyButton* photoButton = [[MyButton alloc] init];
NSLog(@"MyButton 1: %d", [photoButton retainCount]); // -> 1
[photoButton addTarget:nil action:@selector(buttonDown:) forControlEvents:UIControlEventTouchUpInside];
[self.photoItemsArray addObject:photoButton];
NSLog(@"MyButton 2: %d", [photoButton retainCount]); // -> 2
[photoButton release];
NSLog(@"MyButton 3: %d", [photoButton retainCount]); // -> 1
[self addSubview:[self.photoItemsArray lastObject]];
NSLog(@"MyButton 4: %d", [photoButton retainCount]); // -> 2
}
[self.photosThumb retain];
[self.photosFull retain];
NSLog(@"photosThumb: %d photosFull: %d", [photosThumb retainCount], [photosFull retainCount]); // -> retaincount 4, 0
[self.photoItemsArray release];
NSLog(@"photoItemsArray 1: %d", [self.photoItemsArray retainCount]); // -> 1
}
return self;
}
- (void)dealloc {
NSLog(@"dealloc");
self.photosThumb = nil;
self.photosFull = nil;
self.photoItemsArray = nil;
[super dealloc];
}
@end
Here's我的ViewController.h
@interface VideoViewController : UIViewController {
MyScrollView* myView;
NSArray* photos;
NSArray* photosBig;
}
@property (nonatomic, retain) MyScrollView* myView;
@property (nonatomic, retain) NSArray* photos;
@property (nonatomic, retain) NSArray* photosBig;
@end
ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
photos = [NSArray arrayWithObjects:@"one.png", @"two.png", @"three.png", nil];
photosBig = [NSArray arrayWithObjects:@"oneBig.png", @"twoBig.png", @"threeBig.png", nil];
self.myView = [[MyScrollView alloc] initArraySmall:photos initArrayBig:photosBig];
[self.view addSubview:self.myView];
[self.myView release];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"didReceiveMemoryWarning");
[self.myView release];
self.myView = nil;
}
- (void)dealloc {
[super dealloc];
NSLog(@"dealloc");
[self.photos release];
[self.photosBig release];
[self.photoGallery release];
}
爲什麼你是不是在循環內釋放photoButton ??? – makboney 2011-03-29 12:35:09
@makboney:我在該行之前釋放它:「NSLog(@」MyButton 3:%d「,[photoButton retainCount]); // - > 1 – geforce 2011-03-29 12:52:34
upps抱歉...沒有注意到...一個問題你爲什麼要釋放photoItemsArray ??? – makboney 2011-03-29 12:57:18