В Какао Вы предпочитаете NSInteger или интервал, и почему?

Кросс-браузер (старые браузеры тоже) и простое решение:

var docLoaded = setInterval(function () {
    if(document.readyState !== "complete") return;
    clearInterval(docLoaded);

    /*
        Your code goes here i.e. init()
    */
}, 30);

Отображение оповещения в jsfiddle

47
задан Josh Caswell 8 July 2012 в 21:38
поделиться

4 ответа

Путем я понимаю, что случается так, что NSInteger и др. являются архитектурой безопасные версии соответствующих типов C. В основном их размер варьируется в зависимости от архитектуры, но NSInteger, например, как гарантируют, будет содержать любой допустимый указатель для текущей архитектуры.

Apple рекомендует использовать их для работы с OS X 10.5 и вперед, и API:s Apple будет использовать их, таким образом, это будет определенно хорошая идея выработать привычку использования их. Они требуют немного большего количества ввода, но кроме которого это, кажется, не причина не использовать их.

57
ответ дан Theo 26 November 2019 в 19:24
поделиться

Проблемы квантования для 64-разрядного времени выполнения

В некоторых ситуациях могут быть серьезным основанием использовать стандартные типы вместо NSInteger: "неожиданное" чрезмерное увеличение размера памяти в 64-разрядной системе.

Очевидно, если целое число 8 вместо 4 байтов, объем памяти, взятый значениями, удвоен. Учитывая, что не каждое значение является целым числом, тем не менее, Вы не должны обычно ожидать, что объем потребляемой памяти Вашего приложения удвоится. Однако способ, которым Mac OS X выделяет изменения памяти в зависимости от объема памяти, который требуют.

В настоящее время, если Вы просите 512 байтов или меньше, malloc окружают к следующему несколько 16 байтов. Если Вы просите больше чем 512 байтов, однако, malloc окружает к следующему несколько из 512 (по крайней мере 1 024 байта). Предположим тогда, что Вы определяете класс, который - среди других - объявляет пять NSInteger переменные экземпляра, и что в 32-разрядной системе каждый экземпляр занимает, скажем, 272 байта. В 64-разрядной системе экземпляры были бы в теории требовать 544 байтов. Но из-за стратегии выделения памяти каждый на самом деле займет 1 024 байта (почти четырехкратное увеличение). При использовании большого количества этих объектов объем потребляемой памяти приложения может быть значительно больше, чем Вы могли бы иначе ожидать. Если бы Вы заменили эти NSInteger переменные с sint_32 переменные, Вы только использовали бы 512 байтов.

, Когда Вы выбираете, что скаляр использовать, поэтому, удостоверьтесь, что Вы выбираете что-то разумное. Есть ли какая-либо причина, почему Вам нужно значение, больше, чем Вам было нужно в Вашем 32-разрядном приложении? Используя 64-разрядное целое число для подсчета многих секунд вряд ли будет необходимо...

43
ответ дан mmalc 26 November 2019 в 19:24
поделиться

64-разрядный на самом деле разум d'ГЄtre для NSInteger и NSUInteger; прежде 10.5, те не существовали. Эти два просто определяются как longs в 64-разрядном, и как ints в 32-разрядном:

#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

Таким образом, с помощью них вместо более основного C вводит, когда Вы хотите 'разрядно-собственный' размер.

CocoaDev имеет еще некоторую информацию

18
ответ дан Sören Kuklau 26 November 2019 в 19:24
поделиться

Я предпочитаю стандарт c объявления стиля, но только потому, что я переключаюсь между несколькими языками, и я не должен думать слишком много об этом, но кажется, что я должен начать смотреть на nsinteger

0
ответ дан JamesSugrue 26 November 2019 в 19:24
поделиться