Вы мыслите в терминах процедурных языков, таких как C. Это неплохо, так как существуют процедурные языки для процедурных языков, но вы не хотите думать с объектно-ориентированным языком, таким как Objective-C.
На процедурном языке у вас есть некоторые данные и код. Два отдельных. Хотя у вас могут быть функции, которые работают с данными, эти функции могут быть в любом месте вашего источника, как и данные. Нет четкого разграничения обязанностей, если вы не позаботитесь о разработке своей программы определенным образом. Один из способов разграничить вещи - написать код на С, который выглядит очень похожим на объектно-ориентированный код.
В ООП у вас есть данные и код, который оперирует этими данными. Код и данные идут вместе. Данные - это переменные-члены вашего класса, а код - функции-члены вашего класса.
Вы можете составлять большие объекты, комбинируя объекты более простых классов. Например, автомобиль будет содержать объекты класса двигателя, кузова, четыре объекта класса шин и т. Д.
Объекты также могут соединяться друг с другом, если один объект использует другой. Объект водителя будет использовать автомобиль, или автомобиль будет использовать дорогу.
Объектно-ориентированное программирование - это не Серебряная Пуля, которую мы искали с момента изобретения компьютеров. Это просто хороший способ организации вашего кода. По мере того, как вы становитесь более опытным, вы быстро обнаружите, что объектно-ориентированный код может быть таким же крысиным гнездом, как и процедурный код. Если это так, вы не думаете о своей проблеме правильно.