ОК, после вашего редактирования я думаю, что вижу, что происходит. Этот код, в точности как вы написали, должен работать хорошо. Xcode не будет показывать вам значения этих CGPoints, потому что он не знает, что это массив, просто указатель на одну CGPoint. Но это там. Установите точку останова сразу после вызова setVertices:
. В командной строке gdb выведите некоторые из этих значений.
(gdb) print _vertices[1]
$2 = {
x = 69,
y = 40
}
(gdb) print _vertices[3]
$3 = {
x = 17,
y = 10
}
Правильно, понимаете?
Это не значит, что здесь нет проблем. С одной стороны, setVertices:
пропускает эту память. Вы выделяете память для tempVertices
, удерживаете этот указатель, но нигде не освобождаете его. В следующий раз, когда вы позвоните setVertices:
, у вас будет утечка.
Еще большая проблема заключается в том, что никто не знает, сколько CGPoints содержится в этом массиве, кроме кода, который выделил для него память. Это всегда будет 4 CGPoints? Что произойдет, если кто-нибудь получит доступ к _vertices[5]
или _vertices[27]
? Плохие вещи, если вы не выделите им столько места.
Требуется ли, чтобы это был простой массив C? Мол, эти точки будут переданы OpenGL или cocos2d или что-то еще? Если нет, вы можете рассмотреть возможность использования некоторого класса массива для него. Поскольку эти объекты не являются производными от NSObject, вы не можете использовать NSArray. Вы можете использовать std::vector
, если не возражаете против перетаскивания в кучу C ++. Я бы, наверное, этого не сделал.
Если вы настроены на привязку к массиву C, вам, вероятно, следует поработать, чтобы сделать интерфейс менее подверженным ошибкам. Как я уже упоминал ранее, вам нужно отслеживать размер массива. Возможно, вы могли бы добавить параметр в setVertices: представляющий количество CGPoints, которые содержит массив. Тогда другие части кода, которые обращаются к _vertices
, могут проверить это, чтобы убедиться, что они не выходят за пределы массива. И, как я упоминал ранее, убедитесь, что вы освободили эту память, прежде чем переназначить указатель.
Бездействие с указателями чревато опасностью. Действуй осторожно, там будут драконы.