Рекомендуемый способ создания небольших служебных классов в Objective C - PullRequest
2 голосов
/ 19 октября 2011

У меня есть класс (скажем, класс A, с файлами Ah и Am).Этот класс нуждается в служебном классе, и мне лень создавать Utility.h и Utility.m

Есть ли способ включить его определение (реализацию) в Am?Неизбежно ли создавать свою декларацию (интерфейс)?

Каковы лучшие практики в этом случае?

Ответы [ 2 ]

6 голосов
/ 19 октября 2011

Конечно, есть выход: просто добавьте реализацию в файл. Компилятору все равно, где находится ваша реализация, если в нем есть все соответствующие объявления. Работа компоновщика заключается в том, чтобы выяснить, где на самом деле находится объектный код.

И нет, вы не можете избежать создания определения. Так что создавайте его там, где когда-либо нужен ваш другой код. Если вам нужен вспомогательный класс только для класса A, то вы должны также предпочесть поместить объявление интерфейса в файл реализации.

1 голос
/ 19 октября 2011

Вы можете добавлять методы в класс @implementation, не объявляя их в интерфейсе. Даже в частной категории A (). Компилятор будет жаловаться на отсутствующие селекторы, если вы не будете достаточно осторожны со всеми методами до (в порядке исходного кода) его первого использования.

Итак, технически да, вы можете избежать объявления интерфейса.

У вас есть несколько дополнительных вариантов, которые не требуют создания нового класса с его парой файлов и огромным усилием выбора нового класса:

  1. Создать категорию A (Utils) в тех же файлах A.h / m
  2. Создать категорию A (Utils) только в A.m (немного более быстрое кодирование)
  3. Создание простых функций C в A.h / m

Во всех этих случаях вам нужно писать практически одинаковый код. Я бы предпочел вариант 2, а затем извлечь категорию из фактических файлов или даже из другого класса, когда методы нужны в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...