Проблема заключается в
UIButton *b = [[UIButton buttonWithType:UIButtonTypeRoundedRect]
initWithFrame:CGRectMake(0, 0, 100, 100)];
buttonWithType
возвращает автоматически освобожденный инициализированный объект. Вы не можете отправить его initWithFrame снова, поскольку объект можно инициализировать только один раз.
Установите его рамку отдельно:
b.frame = CGRectMake(0, 0, 100, 100);