Почему Вы проверили бы на Присвоенный (сам) в методах объекта?

Используйте android:textAlignment="center"

       

8
задан Mark Elder 24 June 2009 в 09:39
поделиться

6 ответов

You can call a instance method on a null pointer although it's not the sort of thing you want to do deliberately. When that happens, execution continues along quite happily until it needs to access the instance data and then it all goes bang.

In that case, checking for nil would alert you at the top of the procedure so you could do something different such as logging a stack trace. Or you could put a break point on the raise line so you can dive in and see what is happening.

Ie, it's something that I might do if I had a specific bug I was trying to track down where a nil reference was being used.

Doing it regularly strikes me as a code smell.

9
ответ дан 3 November 2019 в 14:03
поделиться

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

10
ответ дан 3 November 2019 в 14:03
поделиться

Существуют сценарии нарушения прав доступа, которые могут привести к запуску кода в памяти, где значение Self равно нулю. Некоторые программисты вместо решения реальной проблемы пытаются обойти использование таких утверждений, чтобы предотвратить разного рода искажения. Я бы очень хорошо проверил, возникает ли это исключение во время выполнения, если да - у вас в руках ошибочный код.

Вы можете прочитать следующую статью на эту тему: Когда Self in Nil ... You Know You are in Trouble .

Другая возможность связана с событиями, вы можете прочитать больше здесь, с множеством примеров таких тестов и соответствующими пояснениями: Multicast Events - Part 2 .

4
ответ дан 3 November 2019 в 14:03
поделиться

Это случай, который обязательно должен привести к сбою (т. Е. Исключение ОС, такое как «чтение с адреса 0x00000000»). Создание языкового исключения просто излишне (и неправильное использование EAbstractError здесь не улучшит ситуацию).

Проверка допустимых входных параметров не является выполнимой задачей на небезопасном языке, поскольку вы никогда не получите уверенности, и, следовательно, ваша обработка недопустимых параметров никогда не будут согласованы. (Почему вы генерируете исключение, когда передается нулевой указатель, но не для 0x00000001, что также недопустимо?). Для более технического обсуждения этого вопроса прочтите блог Ларри Остермана о , почему не проверять действительные указатели .

Следует отметить одно исключение: в Delphi метод Free может вызываться по нулевому указателю,

3
ответ дан 3 November 2019 в 14:03
поделиться

И тогда всегда есть вероятность, что код не выйдет из строя при работе с nil Self. Пример - если он не обращается ни к каким полям объекта-владельца. В таком случае этот тест выявит проблему, которая иначе осталась бы незамеченной.

Тем не менее, это доводит защитное программирование до крайности. Я никогда (ладно, почти никогда - только когда охотлюсь на тупиц ... эээ ... устраняю ошибки) этого не делаю.

1
ответ дан 3 November 2019 в 14:03
поделиться

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

1
ответ дан 3 November 2019 в 14:03
поделиться
Другие вопросы по тегам:

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