Поведение не такое, как в C ++. Объекты подсчитываются по ссылкам. Если вы хотите сохранить его, вы должны предъявить претензию.
Если вы создаете объект самостоятельно с помощью метода, имя которого включает в себя слова alloc
, new
или copy
, то у вас уже есть право собственности. Это похоже на C ++ new
. (Когда вы создали объект с alloc
, вам также нужно инициализировать его каким-нибудь методом, имя которого начинается с init
. Но вы должны сначала создать его. В C ++ обе вещи будут считаться частями одного акта построения .)
Объекты, которые вы получаете от других методов (например, двух из трех упомянутых вами методов NSString), доступны только временно, если только вы не заявите явное право собственности, вызвав [object retain]
. Вам нужно сделать это, только если вы хотите, чтобы они оставались вне непосредственного контекста. (На самом деле нет эквивалента этому в C ++.)
Однако, если вы получаете право собственности, вы должны отказаться от него, когда закончите, позвонив по номеру [object release]
. Это что-то вроде C ++ delete
, за исключением того, что объект на самом деле не уничтожается до тех пор, пока не будут сняты все заявки на владение.
Понимание этого действительно очень важно, возможно, только важная вещь, которую вам нужно знать, чтобы использовать Objective-C. Внимательно прочитайте документацию о владении объектом , и вы будете отсортированы.