Хотя мне очень нравятся ваши методы и я люблю увеличение скорости, к сожалению, они теряют свои способности, когда e1
e2
имеют более сложную структуру, чем вектор.
> dim(a) <- c(1e2, 1e4)
> dim(b) <- c(1e2, 1e4)
>
> identical(!a, my.not(a))
[1] FALSE
> identical(a & b, my.and(a, b))
[1] FALSE
> identical(a | b, my.or(a, b))
[1] FALSE
> identical(xor(a, b), my.xor(a, b))
[1] FALSE
Логические функции сохраняют структуру и атрибуты, что является дорогостоящим, но имеет ценность.
T <- TRUE; F <- FALSE
A <- matrix(c(T, F, T, F), ncol=2)
B <- matrix(c(T, F, F, T), ncol=2)
> A & B
[,1] [,2]
[1,] TRUE FALSE
[2,] FALSE FALSE
> my.and(A, B)
[1] TRUE FALSE FALSE FALSE
Также, как указано в комментариях, NA
также необходимо учитывать - то есть, больше накладных расходов.
a <- c(T, F, NA, T)
b <- c(F, NA, T, T)
> identical(!a, my.not(a))
[1] TRUE
> identical(a & b, my.and(a, b))
[1] FALSE
> identical(a | b, my.or(a, b))
[1] FALSE
> identical(xor(a, b), my.xor(a, b))
[1] TRUE
a <- c(T, F, NA, T)
b <- c(F, NA, T, T)
names(a) <- names(b) <- LETTERS[23:26]
> a & b
W X Y Z
FALSE FALSE NA TRUE
> my.and(a, b)
[1] FALSE NA NA TRUE
<час> Конечно, с учетом всего вышесказанного, ваши функции предлагают невероятное увеличение! Если вы знаете, что вам не нужно беспокоиться о NA и подобных вещах, и вы не заботитесь о структуре, то почему бы просто не использовать их!
Я не могу понять, почему вы не можете скопировать слой. Действительно, слой является «неотъемлемой частью» UIView. Но в конце концов, это просто еще один объект с несколькими свойствами.
На самом деле существует метод для CALayer, который называется:
- (id)initWithLayer:(id)layer
Но он не предназначен для создания копии слоя. (Вы можете прочитать документацию Apple, чтобы объяснить, почему)
CALayer не соответствует NSCopying, поэтому у вас есть два варианта:
Независимо от того, какой способ вы выберете, вам нужно задать следующий вопрос: какие свойства CALlayer вы хотите скопировать?
Допустим, вы хотите скопировать только содержимое и frame:
CALayer copyLayer = [CALayer layer];
copyLayer.contents = theLayerToBeCopied.contents;
copyLayer.frame = theLayerToBeCopied.frame;
return copyLayer;
Вы можете просмотреть и скопировать все свойства слоя или просто скопировать те, которые вам нужны. Может быть хорошим способом поместить в категорию CALayer.
Это невозможно: уровень является свойством UIView. Следовательно, когда вы отпускаете UIView, его слой исчезает. Ваше представление о слое как о холсте не ошибочно. Но этот слой является неотъемлемой частью его UIView.
UILabel на самом деле не очень сложный элемент управления. Я предлагаю вам отказаться от этой линии атаки и научиться рисовать то, что вы хотите, используя Quartz, в новом CGImage. Затем вы можете назначить это свойству содержимого CALayer, не беспокоясь обо всем этом.