Должен ли я использовать сборку мусора Objective-C при записи для 10.5+?

Если вам нужно сделать это в python 2.7 без переопределения глобального json.encoder.FLOAT_REPR, вот один из способов.

import json
import math

class MyEncoder(json.JSONEncoder):
    "JSON encoder that renders floats to two decimal places"

    FLOAT_FRMT = '{0:.2f}'

    def floatstr(self, obj):
        return self.FLOAT_FRMT.format(obj)

    def _iterencode(self, obj, markers=None):
        # stl JSON lame override #1
        new_obj = obj
        if isinstance(obj, float):
            if not math.isnan(obj) and not math.isinf(obj):
                new_obj = self.floatstr(obj)
        return super(MyEncoder, self)._iterencode(new_obj, markers=markers)

    def _iterencode_dict(self, dct, markers=None):
        # stl JSON lame override #2
        new_dct = {}
        for key, value in dct.iteritems():
            if isinstance(key, float):
                if not math.isnan(key) and not math.isinf(key):
                    key = self.floatstr(key)
            new_dct[key] = value
        return super(MyEncoder, self)._iterencode_dict(new_dct, markers=markers)

Затем в python 2.7:

>>> from tmp import MyEncoder
>>> enc = MyEncoder()
>>> enc.encode([23.67, 23.98, 23.87])
'[23.67, 23.98, 23.87]'

В python 2.6 он не совсем работает, как указывает Матвей Шинкель:

>>> import MyEncoder
>>> enc = MyEncoder()  
>>> enc.encode([23.67, 23.97, 23.87])
'["23.67", "23.97", "23.87"]'
11
задан Lawrence Johnston 9 February 2009 в 23:34
поделиться

3 ответа

Если Вы пишете новый код Какао и нацелены на Mac OS X 10.5, используйте сборку "мусора" Objective C.

При написании некоторого кода, который, возможно, также должен работать на iPhone, можно записать и протестировать тот код на обе модели очень легко путем хранения того кода в отдельной платформе, записи этого со свойством -retain и -release используйте, и устанавливающий и Вашу платформу и Вашу цель модульного теста для нее к поддерживаемому GC, а не только для GC.

XCode выполнит Ваш пакет модульного теста дважды, однажды с GC на и однажды с GC прочь, и Ваша платформа будет применима под обеими моделями выполнения. Затем, если Вы в конечном счете хотите принести тот код образцового уровня к iPhone, можно поместить его в предназначенную iPhone статическую библиотеку или включать его непосредственно в проект iPhone.

Независимо от того, рассматриваете ли Вы выполнение Вашего кода iPhone, тем не менее, необходимо определенно быть нацелены на сборку "мусора", если приложение потребует Leopard. Это упростит разработку, и сборщик "мусора" Objective C работает вполне хорошо.

12
ответ дан 3 December 2019 в 08:06
поделиться

Если существует возможность портировать Ваше приложение на iPhone, Вы не должны использовать его.

Сборка "мусора" могла бы иметь отрицательный эффект на производительность, если у Вас есть специальные варианты использования. Без GC Вы имеете точный контроль на разрушении объекта, который не имеет место мир GC. В большинстве проектов это стоит того для включения GC, поскольку это менее подвержено ошибкам и легче.

В теории управление памятью без GC может всегда быть быстрее, что с GC, однако, это не имеет место в наиболее практическом применении (так как GC обычно более оптимизируется тот человек).

2
ответ дан 3 December 2019 в 08:06
поделиться

Я предпочитаю обрабатывать управление памятью сам, просто потому что мне нравится иметь тот уровень управления. Я знаю на основе опыта на других языках (C#), что GC не позволяет Вам полностью игнорировать проблемы памяти, и это - то же в Какао с вещами как использование слабых ссылок и обратных вызовов (пусто *), где объект явно не принадлежит другому объекту. Вы являетесь в основном торговыми один набор проблем (утечки памяти) для другого. Лично я не склонен делать слишком много ошибок управления памятью в эти дни, и те я действительно делаю, довольно легки разыскать.

Существуют некоторые ситуации (такие как реализация методов источника данных для NSOutlineView, где Вы не хотите сохранять объект, предоставляемый представлению схемы), где я думал, что GC был бы действительно полезен, но я еще не сделал никаких реальных тестов с ним.

Apple перечисляет некоторые другие преимущества и недостатки в руководстве по программированию GC.

2
ответ дан 3 December 2019 в 08:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: