Почему документация PyObjC такая плохая?[закрыто]

StackOverflow https://stackoverflow.com/questions/14422

  •  08-06-2019
  •  | 
  •  

Вопрос

Например, http://developer.apple.com/cocoa/pyobjc.html по-прежнему для OS X 10.4 Tiger, а не 10.5 Leopard..И это официальная документация Apple к нему..

Официальная страница PyObjC столь же плоха, http://pyobjc.sourceforge.net/

Это настолько плохо, что сбивает с толку..Я рассматриваю возможность изучения Ruby в первую очередь потому, что материал RubyCocoa намного лучше документирован, и есть много достойных руководств (http://www.rubycocoa.com/ например), а также из-за инструментария Shoes GUI toolkit..

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

Все, что я хочу сделать, это создавать довольно простые приложения на Python с графическим интерфейсом Cocoa..
Кто-нибудь может пролить свет на ужасную документацию или указать мне на некоторые руководства, которые не просто дают вам огромные блоки кода и предполагают, что вы знаете, что NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) делает?..

Это было полезно?

Решение

Я согласен, что этот учебник ошибочен, он бросает случайный, необъяснимый код прямо перед вашими глазами.Он вводит такие понятия, как пул автоматического освобождения и пользовательские значения по умолчанию, не объясняя, зачем они вам нужны ("Пул автоматического освобождения для управления памятью" вряд ли является объяснением).

Это сказало…

по сути, все, что я хочу сделать, это писать приложения Cocoa без необходимости изучать ObjC.

Я боюсь, что на данный момент ты будет вам необходимо базовое понимание ObjC, чтобы извлекать пользу из любого языка, использующего Cocoa.PyObjC, RubyCocoa, Nu и другие - это в лучшем случае ниши, и все они были разработаны людьми, хорошо знакомыми со всеми тонкостями ObjC и Какао.

На данный момент вы получите наибольшую выгоду, если будете реалистично рассматривать эти мосты как полезные там, где языки сценариев действительно блистают, а не пытаться создать с их помощью целое приложение.В то время как этот имеет было сделано (с LimeChat я сейчас использую приложение, написанное RubyCocoa), это редкость и, вероятно, будет продолжаться некоторое время.

Другие советы

Основная причина отсутствия документации для PyObjC заключается в том, что есть один разработчик (я), и, как большинству разработчиков, мне не особенно нравится писать документацию.Поскольку PyObjC для меня является побочным проектом, я обычно сосредотачиваюсь на работе над функциями и исправлениями ошибок, потому что это для меня интереснее.

Лучший способ улучшить документацию - добровольно присоединиться к списку рассылки pyobjc-dev.

В качестве отступления:список рассылки pythonmac-sig (см. Google) - отличный ресурс для получения справки по Python в MacOSX (не только PyObjC).

Чтобы быть прямолинейным:

Если вы хотите стать эффективным программистом Cocoa, вы должны изучить Objective-C.Конец истории.

Ни Python, ни Ruby не являются заменой Objective-C через их соответствующие мосты.Вам все еще нужно понимать API Objective-C, поведение, присущее производным классам NSObject, и многие другие детали Cocoa.

PyObjC и RubyCocoa - отличный способ получить доступ к функциональности Python или Ruby из приложения Cocoa, включая создание приложения Cocoa в основном, если не полностью, на Python или Ruby.Но успех в этом основан на глубоком понимании Cocoa и API Objective-C, из которых он состоит.

Ответ Тома и Мартина определенно верен (практически в любом проекте с открытым исходным кодом вы обнаружите, что большинство участников особенно заинтересованы в, ну, развивающийся;не так много в полусвязанных вопросах, таких как документация), но я не думаю, что ваш конкретный вопрос в конце хорошо вписался бы в документацию PyObjC.

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

NSThread является частью Cocoa API, и как таковой документировано в Apple, включая конкретный метод + detachNewThreadSelector:toTarget:withObject: (Я бы ссылался там, но, очевидно, в stackoverflow есть ошибки при его разборе).CocoaDev - вики также есть статья.

Я не думаю, что для PyObjC было бы хорошей идеей пытаться документировать Cocoa, за исключением нескольких базовых примеров того, как использовать его из Python.Объяснение селекторов также, вероятно, выходит за рамки PyObjC, поскольку они тоже являются особенностью Objective-C, а не конкретно PyObjC.

Я наткнулся на хороший учебник по PyObjC / Cocoa:

http://lethain.com/entry/2008/aug/22/an-epic-introduction-to-pyobjc-and-cocoa/

Все, что я хочу сделать, это создавать довольно простые приложения на Python с графическим интерфейсом Cocoa..Кто-нибудь может пролить свет на ужасную документацию или указать мне на некоторые руководства, которые не просто дают вам огромные блоки кода и предполагают, что вы знаете, что делает NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) ..?

[...]

по сути, все, что я хочу сделать, это писать приложения Cocoa без необходимости изучать ObjC.

Хотя я в принципе согласен с ответом Сорена, я бы пошел еще дальше:

Пройдет много времени, если вообще когда-либо, прежде чем вы сможете использовать Cocoa без некоторого понимания Objective C.Cocoa - это не абстракция, созданная независимо от Objective C, она явно привязана к нему.Вы можете увидеть это в приведенной выше строке примера кода:

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

Это способ написания строки Objective C на Python:

[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];

Теперь важно отметить, что эту линию можно рассматривать двумя способами:(1) как строка Objective C, или (2) как вызов фреймворков Cocoa.По синтаксису мы рассматриваем это как (1).Мы рассматриваем это как (2), признавая, что NSThread - это фреймворк Cocoa, который предоставляет набор удобных функций.В данном случае этот конкретный фреймворк Cocoa упрощает для нас задачу заставить объект начать что-то делать в новом потоке.

Но самое интересное вот в чем:Приведенный здесь фреймворк Cocoa (NSThread) предоставляет нам этот удобный сервис способом, который явно привязан к языку, на котором был написан фреймворк.А именно, NSThread предоставил нам функцию, которая явно ссылается на "селекторы".Селекторы - это, по сути, название чего-то фундаментального в том, как работает Objective C.

Так что в этом-то и загвоздка.Cocoa по сути является творением Objective-C, и его создатели создавали его с учетом Objective C.Я не утверждаю, что невозможно перевести интерфейс функций Cocoa в форму, более естественную для других языков.Просто, как только вы меняете фреймворк Cocoa, чтобы перестать ссылаться на "селекторы", на самом деле это уже не фреймворк Cocoa.Это переведенная версия.И как только вы начинаете идти по этому пути, я предполагаю, что все становится по-настоящему запутанным.Вы пытаетесь идти в ногу с Apple, поскольку они обновляют Cocoa, возможно, вы столкнулись с некоторыми частями Cocoa, которые просто плохо переводятся на новый язык, неважно.Таким образом, вместо этого такие вещи, как PyObjC, предпочитают предоставлять доступ к Cocoa напрямую, таким образом, чтобы иметь очень четкую и простую корреляцию.Как говорится в документации:

Чтобы иметь однозначный перевод между сообщениями Objective-C и методами Python без потерь, эквивалентом имени метода Python является просто селектор с двоеточиями, замененными символами подчеркивания.

Конечно, это немного некрасиво, и это означает, что вам нужно кое-что знать об Objective-C, но это потому, что альтернатива, если она действительно существует, не обязательно лучше.

Я вообще ничего не знал об Objective C или Cocoa (но много знал о Python), но сейчас я пишу довольно сложное приложение на PyObjC.Как я этому научился?Я поднял трубку Программирование Cocoa для OSX и прошелся по всей книге (довольно быстрый процесс), используя PyObjC.Просто игнорируйте все, что касается управления памятью, и все будет в порядке.Единственное предостережение заключается в том, что очень редко вам приходится использовать декоратор, такой как endSheetMethod (на самом деле, я думаю, что это единственный, который я использовал):

@PyObjcTools.AppHelper.endSheetMethod
def alertEnded_code_context_(self, alert, choice, context):
    pass

Этот ответ будет не очень полезным, но, как разработчик, я ненавижу заниматься документацией.Поскольку это проект с открытым исходным кодом, трудно найти людей для работы с документацией.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top