Полагаю, это в основном сделано для простоты использования, как, конечно, можно обойтись без (и поставить каждый autorelease
в отдельной строке):
Всякий раз, когда вы release
объект, вы 'сделано с этим (или, по крайней мере, вы должны быть).Нет необходимости возвращать объект, так как он, возможно, уже был уничтожен, и в любом случае вызывающая сторона не должна работать с объектом, если он еще не уничтожен (т.е. кто-то еще имеет ссылку на него).
С другой стороны, autorelease
часто используется вместе с init
/ alloc
и просто отмечает объект для последующего уничтожения.Всякий раз, когда вы используете autorelease
, вы можете быть почти уверены, что объект будет использован впоследствии.Независимо от того, возвращаете ли вы его напрямую или работаете с ним самостоятельно (например, после [[[SomeClass alloc] init] autorelease]
), очень удобно возвращать объект, поскольку он сохраняет явную строку кода для autorelease
.Также полезно иметь autorelease
непосредственно в той же строке: на return [someObject autorelease]
вы можете непосредственно видеть, что это объект с автоматическим выпуском.Если вы используете его с init
/ alloc
, вы можете сразу увидеть, что этот объект не нуждается в другом release
.