Вам абсолютно нужно физическое устройство. Различие в производительности между средством моделирования и фактическими аппаратными средствами iPhone/iPod Touch огромно. Код, который будет работать хороший и быстрый в средстве моделирования, может легко оказаться слишком медленным, чтобы быть применимым на реальной вещи. Также API, обеспеченный средством моделирования, не на 100% идентичен реальной вещи, таким образом, код, который хорошо работает в sim, не может работать над устройством. Единственный способ знать наверняка состоит в том, чтобы часто тестировать на существующем устройстве.
, Поскольку другие упомянули, iPod touch работает хорошо устройством разработки. Таким образом, если Вам не нужна ни одна из функций iPhone, это - польза, более дешевая, альтернативная.
Да. Мы можем получить ответ от [1 111] блок . Вот пример, который я кодирую в Ubuntu 16.04, 64bit, gcc.
#include <stdio.h>
typedef unsigned int uint32_t;
struct {
uint32_t foo1:8;
uint32_t foo2:24;
} G;
int main() {
G.foo1 = 0x12;
G.foo2 = 0xffffff; // G is 0xfffff12
printf("G.foo1=0x%02x, G.foo2=0x%06x, G=0x%08x\n", G.foo1, G.foo2, *(uint32_t *)&G);
G.foo2++; // G.foo2 overflow
printf("G.foo1=0x%02x, G.foo2=0x%06x, G=0x%08x\n", G.foo1, G.foo2, *(uint32_t *)&G);
G.foo1 += (0xff-0x12+1); // // G.foo1 overflow
printf("G.foo1=0x%02x, G.foo2=0x%06x, G=0x%08x\n", G.foo1, G.foo2, *(uint32_t *)&G);
return 0;
}
Компиляция это с gcc -S <.c file>
. Можно получить файл .s
блока. Здесь я показываю блок G.foo2++;
, и я пишу некоторые комментарии.
movl G(%rip), %eax
shrl $8, %eax # 0xfffff12-->0x00ffffff
addl $1, %eax # 0x00ffffff+1=0x01000000
andl $16777215, %eax # 16777215=0xffffff, so eax still 0x01000000
sall $8, %eax # 0x01000000-->0x00000000
movl %eax, %edx # edx high-24bit is fool2
movl G(%rip), %eax # G.foo2, tmp123
movzbl %al, %eax # so eax=0x00000012
orl %edx, %eax # eax=0x00000012 | 0x00000000 = 0x00000012
movl %eax, G(%rip) # write to G
Мы видим, что компилятор будет использовать команды сдвига для обеспечения то, что Вы говорите. (отметьте: вот расположение памяти G:
----------------------------------
| foo2-24bit | foo1-8bit |
----------------------------------
, Конечно, результат вышеупомянутых:
G.foo1=0x12, G.foo2=0xffffff, G=0xffffff12
G.foo1=0x12, G.foo2=0x000000, G=0x00000012
G.foo1=0x00, G.foo2=0x000000, G=0x00000000