вам нужно выпустить что-либо, содержащее слово new, alloc / init или copy.
также вам не нужно выделять / инициализировать это:
UIButton *placeHolderButton = [[UIButton alloc] init];
placeHolderButton = sender;
другой способэто делается следующим образом:
UIButton *placeHolderButton = (UIButton *)sender;
в вашей версии, он выделяет экземпляр с счетом сохранения +1, но вы немедленно заменяете ссылку, поэтому нет возможности освободить память позже.
вы создаете много экземпляров с помощью alloc / init, а затем заменяете их ссылки автоматически выпущенными экземплярами.
вы можете использовать
NSString *placeHolderString = [placeHolderString stringByAppendingString:firstValue.text];
вместо
NSString *placeHolderString = [[NSString alloc] init];
placeHolderString = [placeHolderString stringByAppendingString:firstValue.text];
, который снова заменяет управляемый вручную экземпляр, созданный в первой строке, на автоматически выпущенный экземпляр во второй.
В действительности вы можете заменить каждый alloc / init в этом методе фабрики и не иметьиметь дело с памятью вообще в этом, поскольку они были бы автоматически выпущенными экземплярами.
-(IBAction)inputNumbersFromButtons:(id)sender {
//cast sender as a UIButton to suppress compiler warning, and allow us to reference it as placeholder button
UIButton *placeHolderButton = (UIButton *) sender;
int i = placeHolderButton.tag;
NSString *addThisNumber = [NSString stringWithFormat:@"%i", i];
[firstValue setText:[firstValue.text stringByAppendingString:addThisNumber]];
}
Если вы посмотрите на документы класса для NSString, любой метод с + рядом с ним (т.е.*) string) - это метод класса, не используйте эти методы для ссылки после того, как вы вызвали для нее alloc / init.