ОК, я кое-что разработал, отчасти благодаря (плохо помеченному и озаглавленному) ТАКОМУ вопросу / ответам здесь .Что мне нужно было сделать, так это прочесть о UIView.backgroundColor
.В моих документах написано @property(nonatomic, copy) UIColor *backgroundColor
.Здесь «копия» говорит мне, что когда я говорю что-то вроде:
myUIView.backgroundColor=[[UIColor alloc]initWithPatternImage:myUIImage];
myUIView.backgroundColor
на самом деле отличается от [[UIColor alloc]initWithPatternImage:myUIImage]
.Это отдельное myUIView.backgroundColor
, на самом деле, автоматически выпущено, поэтому, когда я иду [myUIView.backgroundColor release];
, я на самом деле стреляю себе в ногу.Что мне нужно сделать, это:
UIColor* tmpColor=[[UIColor alloc]initWithPatternImage:myUIImage];
currentPage.backgroundColor=tmpColor;
[tmpColor release];
(и, конечно же, вокруг этого я также выделяю и освобождаю myUIImage
).Теперь, чтобы освободить свой scrollView patternImage, я могу просто сделать что-то вроде currentPage.backgroundColor=nil;
(например, @BuildSucceeded) или currentPage.backgroundColor=[UIColor clearColor];
(не уверен, есть ли практическая разница).Я думаю, внутренне, оба они вызывают currentPage
до autorelease
старого backgroundColor
.После внесения этих изменений я не смог вызвать сбой моего приложения.
Мне нужно сказать следующее: я не думаю, что C ++ делает это правильно, но C # и Java прекрасно справляются безлюбой из этих сложных выпусков, авто-релиз, @property business.Конечно, если бы кто-то хотел реализовать аналогичную (для Objective-C) систему управления указателями в Java или C #, он мог бы, но, конечно, никто не хочет этого, потому что это было бы довольно бесполезно. Pleeeease Apple, мигрировать от Objective-C!