Как исправить & ldquo; Несовместимые типы указателей, отправляющие «void (void)» параметру типа «SEL _Nonnull» & rdquo; в NSTimer

GIST, чтобы принять это: Работа с неглубокими списками (без суб_листов, только отдельных элементов) с использованием «нормального присваивания» вызывает «побочный эффект» при создании мелкого списка, а затем вы создаете копию этого списка, используя « нормальное присвоение ". Этот «побочный эффект» - это когда вы меняете любой элемент созданного списка копий, потому что он автоматически изменит те же элементы исходного списка. То есть, когда copy пригодится, поскольку при изменении элементов копии он не будет изменять исходные элементы списка.

С другой стороны, copy также имеет «побочный эффект» , когда у вас есть список, в котором есть списки (sub_lists), и deepcopy решает его. Например, если вы создаете большой список с вложенными списками в нем (sub_lists) и создаете копию этого большого списка (исходный список). «Боковой эффект» возникнет, когда вы измените суб_листы списка копий, которые автоматически изменят суб_листы большого списка. Иногда (в некоторых проектах) вы хотите сохранить большой список (ваш исходный список), так как он без изменений, и все, что вам нужно, это сделать копию своих элементов (sub_lists). Для этого ваше решение должно использовать deepcopy, который позаботится об этом «побочном эффекте» и сделает копию без изменения исходного содержимого.

Различные поведения операций copy и deep copy относится только к составным объектам (т. е. к объектам, которые содержат другие объекты, такие как списки).

Вот различия, проиллюстрированные в этом простом примере кода:

First

посмотрим, как ведет себя copy (неглубоко), создав исходный список и копию этого списка:

import copy
original_list = [1, 2, 3, 4, 5, ['a', 'b']]
copy_list = copy.copy(original_list)

Теперь давайте проведем некоторые print тесты и как выглядит исходный список по сравнению с его списком копий:

original_list и copy_list имеют разные адреса

print(hex(id(original_list)), hex(id(copy_list))) # 0x1fb3030 0x1fb3328

Элементы original_list и copy_list имеют одинаковые адреса

print(hex(id(original_list[1])), hex(id(copy_list[1]))) # 0x537ed440 0x537ed440

sub_elements из original_list и copy_list имеют те же адреса

print(hex(id(original_list[5])), hex(id(copy_list[5]))) # 0x1faef08 0x1faef08

, изменяющие элементы original_list, не изменяют элементы copy_list

original_list.append(6)
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b']]

, изменяя элементы copy_list, не изменяют элементы original_list [ / g1 3]

copy_list.append(7)
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b'], 7]

изменение оригинала_пользователя sub_elements автоматически изменяет copy_list sub_elements

original_list[5].append('c')
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b', 'c'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b', 'c'], 7]

modifying copy_list sub_elements автоматически изменяет original_list sub_elements

copy_list[5].append('d')
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 7]

Second

посмотрим, как ведет себя deepcopy, делая то же самое, что мы делали с copy (создавая исходный список и копию этого списка):

import copy
original_list = [1, 2, 3, 4, 5, ['a', 'b']]
copy_list = copy.copy(original_list)

Теперь давайте проведем некоторые тесты print и посмотрим, как выглядит исходный список по сравнению с его списком копий:

import copy
original_list = [1, 2, 3, 4, 5, ['a', 'b']]
copy_list = copy.deepcopy(original_list)

original_list и copy_list имеют разные адреса

print(hex(id(original_list)), hex(id(copy_list))) # 0x1fb3030 0x1fb3328

элементы original_list и copy_list имеют одинаковые адреса

print(hex(id(original_list[1])), hex(id(copy_list[1]))) # 0x537ed440 0x537ed440

sub_elements из original_list и copy_list имеют разные адреса

print(hex(id(original_list[5])), hex(id(copy_list[5]))) # 0x24eef08 0x24f3300

Изменение элементов original_list НЕ меняет элементы списка_копии

original_list.append(6)
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b']]

Изменение элементов copy_list НЕ изменяет элементы original_list

copy_list.append(7)
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b'], 7]

Изменение исходного_пользователя sub_elements НЕ изменяет sub_elements copy_list

original_list[5].append('c')
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b', 'c'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b'], 7]

modifyi ng copy_list sub_elements НЕ модифицирует original_list sub_elements

copy_list[5].append('d')
print("original_list is:", original_list) # original_list is: [1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 6]
print("copy_list is:", copy_list) # copy_list is: [1, 2, 3, 4, 5, ['a', 'b', 'd'], 7]
1
задан Fady E 25 March 2019 в 19:19
поделиться

1 ответ

Вы должны создать @selector

_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];
.
0
ответ дан vadian 25 March 2019 в 19:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: