Ответить нет.2:
Я не знаю, как NSSet реализован внутри, но, учитывая, что вы знаете, что храните точки (с X и Y), я думаю, что вам было бы лучше, если бы вы реализовали свой собственный алгоритм разбиения.Лично я бы выбрал свою собственную реализацию вместо NSSet, если вы скажете, что у вас тысячи точек.
Хранение огромных двумерных массивов для каждого пикселя, вероятно, будет самым быстрым способом, но это убьет вас с точки зрения памятипотребление.Вам нужно что-то быстрое, но и легкое.
Существует множество алгоритмов, и вы можете найти их, выполнив поиск "алгоритмов пространственного разделения" в Википедии или Google.Это также зависит от ваших навыков программирования и от того, сколько времени вы готовы вложить в это.
Например, довольно простым было бы реализовать четырехугольное дерево, с которого вы начинаете погружаться с экрана (или площадь) в 4 равных частях.Затем, если и где это необходимо, вы делите эту конкретную ячейку также на 4 части.И вы будете делать это до тех пор, пока в каждой ячейке не будет достаточно маленькое количество точек, чтобы вы могли проверить их все методом грубой силы.Вы можете найти очень хорошее описание на вики: http://en.wikipedia.org/wiki/Quadtree
Надеюсь, это поможет,