Кросс-браузер (старые браузеры тоже) и простое решение:
var docLoaded = setInterval(function () {
if(document.readyState !== "complete") return;
clearInterval(docLoaded);
/*
Your code goes here i.e. init()
*/
}, 30);
Путем я понимаю, что случается так, что NSInteger и др. являются архитектурой безопасные версии соответствующих типов C. В основном их размер варьируется в зависимости от архитектуры, но NSInteger, например, как гарантируют, будет содержать любой допустимый указатель для текущей архитектуры.
Apple рекомендует использовать их для работы с OS X 10.5 и вперед, и API:s Apple будет использовать их, таким образом, это будет определенно хорошая идея выработать привычку использования их. Они требуют немного большего количества ввода, но кроме которого это, кажется, не причина не использовать их.
В некоторых ситуациях могут быть серьезным основанием использовать стандартные типы вместо 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-разрядное целое число для подсчета многих секунд вряд ли будет необходимо...
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 вводит, когда Вы хотите 'разрядно-собственный' размер.
Я предпочитаю стандарт c объявления стиля, но только потому, что я переключаюсь между несколькими языками, и я не должен думать слишком много об этом, но кажется, что я должен начать смотреть на nsinteger