Почему iPhone SDK использует категории, а не протоколы, для некоторых делегатов?

Функция рассчитывает разницу между всеми последовательными значениями вектора. Для вашего примера вектора различия следующие:

 1 - 10 = -9
 1 -  1 =  0
 1 -  1 =  0
.
.
.
 3 -  1 =  2
10 -  3 =  7

Аргумент differences позволяет указать порядок различий.

Например, команда

diff(temp, differences = 2) 
[1]  9  0  0  0  0  1 -2  1  0  0  0  0  0  2  5

дает тот же результат, что и

diff(diff(temp))
[1]  9  0  0  0  0  1 -2  1  0  0  0  0  0  2  5

Следовательно, она возвращает различия разностей.


Аргумент lag позволяет указать задержку.

Например, если lag = 2, вычисляются различия между третьим и первым значением, между четвертым и вторым значением, между пятым и третьим значением и т. Д.

diff(temp, lag = 2)
[1] -9  0  0  0  0  1  0 -1  0  0  0  0  0  2  9
9
задан Dave Peck 22 May 2009 в 23:05
поделиться

3 ответа

В Objective-C 2.0 появилась директива протокола @optional, позволяющая объявлять определенные методы протокола необязательными. До Obj-C 2.0 категории использовались, чтобы разрешить необязательные методы делегирования (в частности, категории в NSObject, которые называются неформальными протоколами ).

Я предполагаю, что большинство категорий вместо -протокол в iPhone SDK унаследован от эквивалентных классов Mac. Например, NSURLConnection существует как в Mac, так и в iPhone SDK, поэтому код, скорее всего, используется совместно. Поскольку Apple еще не смогла изменить все классы Mac для использования формальных протоколов, остается некоторая несогласованность.

13
ответ дан 4 December 2019 в 11:44
поделиться

That's a legacy came from objective-c 1.0, which has no "optional protocol method".

1
ответ дан 4 December 2019 в 11:44
поделиться

До версии Objective-C, которая была выпущена с OS X 10.5 и iPhone SDK под названием «Objective-C 2.0», можно было создавать дополнительные протоколы только с использованием категорий. В Objective-C 2.0 новое ключевое слово @optional было добавлено в протоколы, чтобы отмечать, какие методы являются необязательными (оставшаяся часть неявно требуется).

Так что я думаю, что вы видите небольшое отступление от предыдущих дней до @optional keyword.

Изменить: чтобы ответить на последующие действия, которые появились в исходном вопросе: Мотивация для использования категории в NSObject / id для неформального протокола частично состоит в том, чтобы задокументировать и сгруппировать, какие методы объект может вызывать в своем источник данных (или делегат, или что-то еще), и в меньшей степени, чтобы избежать предупреждений компилятора о том, что вы вызываете методы, которые компилятор не выполняет t know будет присутствовать в объекте, который получает вызов. Представьте, что вы реализуете класс, который вызывает эти методы источника данных - вы, вероятно, захотите проверить, присутствует ли метод, используя [obj responsedsToSelector: @selector (my: datasource: method :)] всякий раз, когда вы заинтересованы в вызове метода my : datasource: method: метод объекта obj.

4
ответ дан 4 December 2019 в 11:44
поделиться