да, если объект был выделен 4 раза, он должен быть освобожден с тем же количеством подсчета.
Кстати, я не уверен, что вы пытаетесь сделать здесь, в конце цикла playButtonбудет иметь ссылку только на последний объект, и вы даже не добавите свой playButton в качестве подпредставления для любого представления.В любом случае вы можете избежать использования метода alloc и user buttonWithType, этот метод сам обрабатывает выделение и освобождение объекта UIButton, поэтому вам не нужно беспокоиться о вызове release.
- (void)viewDidLoad{
for (int i = 1; i <= 4; i++)
{
UIButton *playButton = [UIButton buttonWithType: UIButtonTypeCustom];
playButton.frame = CGRectMake(curLocX,1.0,45,kScrollObjHeight);
[playButton setBackgroundImage:[UIImage imageNamed:@"Play.png"] forState:UIControlStateNormal];
[playButton addTarget:self action:@selector(playClicked) forControlEvents:UIControlEventTouchUpInside];
curLocX+=100;
[self.view addSubview: playButton]; //you might have missed this statement
}}