Установите атрибуты доступности на UIBarButtonItem

Я думаю, что производительность будет весьма схожа. Издержки, которые включены при использовании Списка по сравнению с Массивом, по моему скромному мнению, когда Вы добавляете объекты к списку, и когда список должен увеличить размер массива, который это использует внутренне, когда способность массива достигнута.

предположим у Вас есть Список со Способностью 10, тогда Список увеличится, это - способность, как только Вы хотите добавить 11-й элемент. Можно уменьшить влияние производительности путем инициализации Способности списка к количеству объектов, которые это будет содержать.

, Но, чтобы выяснить, выполняет ли итерация по Списку с такой скоростью, как итерации по массиву, почему Вы не сравниваете ее?

int numberOfElements = 6000000;

List<int> theList = new List<int> (numberOfElements);
int[] theArray = new int[numberOfElements];

for( int i = 0; i < numberOfElements; i++ )
{
    theList.Add (i);
    theArray[i] = i;
}

Stopwatch chrono = new Stopwatch ();

chrono.Start ();

int j;

 for( int i = 0; i < numberOfElements; i++ )
 {
     j = theList[i];
 }

 chrono.Stop ();
 Console.WriteLine (String.Format("iterating the List took {0} msec", chrono.ElapsedMilliseconds));

 chrono.Reset();

 chrono.Start();

 for( int i = 0; i < numberOfElements; i++ )
 {
     j = theArray[i];
 }

 chrono.Stop ();
 Console.WriteLine (String.Format("iterating the array took {0} msec", chrono.ElapsedMilliseconds));

 Console.ReadLine();

В моей системе; итерация по массиву заняла 33 мс; итерация по списку заняла 66 мс.

Честно говоря, я не ожидал, что изменение будет так очень. Так, я поместил свое повторение в цикл: теперь, я выполняю оба повторения 1000 раз. Результаты:

итерация Списка заняла 67 146 мс, выполняя итерации массива, взял 40 821 msec

Теперь, изменение больше не является настолько большим, но все еще...

Поэтому я запустил Отражатель.NET и метода get индексатора класса Списка, похож на это:

public T get_Item(int index)
{
    if (index >= this._size)
    {
        ThrowHelper.ThrowArgumentOutOfRangeException();
    }
    return this._items[index];
}

, Как Вы видите при использовании индексатора Списка Список выполняет проверку, не выходите ли Вы из границ внутреннего массива. Эта дополнительная проверка идет со стоимостью.

31
задан Zorayr 20 October 2014 в 23:42
поделиться

3 ответа

Итак, похоже, что в Interface Builder нет способа сделать это, хотя вы можете установить атрибуты доступности для других элементов пользовательского интерфейса с помощью IB. Поэтому я установил тег на своей панели инструментов, а затем добавил этот код в свой метод viewWillAppear:

UIToolbar *bottombar = (UIToolbar*)[self viewWithTag:kBottomToolbar];

UIView *view = (UIView*)[bottombar.items objectAtIndex:0];
[view setAccessibilityLabel:NSLocalizedString(@"Add Bookmark", @"")];
[view setAccessibilityHint:NSLocalizedString(@"Add Bookmark", @"")];

и так далее для каждого элемента кнопки ...

Не самый элегантный, но он работает.

15
ответ дан 27 November 2019 в 21:44
поделиться

Попытка установить метки доступа вручную не сработала для меня с изображениями UIBarButtonItem. Однако, если бы я установил заголовок вручную, то этикетка сработала бы. Но под изображением отображается название.

В итоге я создал UIButtonItem и использовал его как пользовательский вид для UIBarButtonItem. Единственная потеря - это маскировка изображения, которую выполняет UIBarButtonItem. Добавлен бонус: доступность, настраиваемая в IB.

2
ответ дан 27 November 2019 в 21:44
поделиться

Я получил приведенный выше код для работы с UIBarButtonItems с одной дополнительной строкой:

[view setIsAccessibilityElement:YES];
4
ответ дан 27 November 2019 в 21:44
поделиться