Различия между сильными и слабыми в Objective-C



Я новичок в Obj-C, поэтому мой первый вопрос:



В чем разница между strong и weak in @property объявления указателей на объекты?



кроме того, что значит nonatomic В смысле?

670   8  

8 ответов:

сильная ссылка (которую вы будете использовать в большинстве случаев) означает, что вы хотите "владеть" объектом, на который вы ссылаетесь с помощью этого свойства/переменной. Компилятор позаботится о том, чтобы любой объект, назначенный этому свойству, не был уничтожен, пока вы указываете на него с сильной ссылкой. Только после того, как вы установите свойство в nil будет ли объект уничтожен (если один или несколько других объектов также не содержат сильную ссылку на него).

напротив, со слабым ссылку вы подтверждаете, что вы не хотите иметь контроль над временем жизни объекта. Объект, на который вы ссылаетесь слабо, живет только потому, что по крайней мере один другой объект имеет сильную ссылку на него. Как только это больше не так, объект будет уничтожен, и ваше слабое свойство автоматически получит значение nil. Наиболее частыми случаями использования слабых ссылок в iOS являются:

  1. делегировать свойства, на которые часто ссылаются слабо, чтобы избежать сохранения циклов, и

  2. подвиды / элементы управления основного вида контроллера вида, потому что эти виды уже сильно удерживаются основным видом.

атомные и неатомической относится к теме безопасности геттер и сеттер методы, которые компилятор синтезирует свойства. atomic (по умолчанию) сообщает компилятору, чтобы сделать методы доступа потокобезопасными (добавив блокировку до доступа к ivar), а неатомные делают обратное. Преимущество неатомные немного выше производительности. На iOS Apple использует неатомные почти для всех своих свойств, поэтому общий совет для вас сделать то же самое.

может быть полезно подумать о сильных и слабых ссылках с точки зрения воздушных шаров.

воздушный шар не улетит до тех пор, пока по крайней мере один человек держится за веревку, прикрепленную к нему. Число людей, удерживающих строки, является числом сохранения. Когда никто не держится за струну, баллон улетит (dealloc). Многие люди могут иметь струны к тому же шару. Вы можете получить/установить свойства и вызывать методы этого объекта с сильным и слабым ссылки на литературу.

сильная ссылка похожа на удержание строки на этом воздушном шаре. Пока вы держитесь за веревочку, прикрепленную к воздушному шару, он не улетит.

слабая ссылка-это как смотреть на воздушный шар. Вы можете увидеть его, получить доступ к его свойствам, вызвать его методы, но у вас нет строки для этого шара. Если все, кто держится за веревку, отпустят ее, шар улетит, и вы больше не сможете получить к нему доступ.

сильный: присваивает ему входящее значение, он сохранит входящее значение и освободит существующее значение переменной экземпляра

слабый: присвоит ему входящее значение, не сохраняя его.

таким образом, основное различие заключается в сохранении новой переменной. В общем, вы хотите сохранить его, но есть ситуации, когда вы не хотите его иметь, иначе вы получите цикл сохранения и не сможете освободить память объекты. Например. obj1 сохраняет obj2 и obj2 сохраняет obj1. Чтобы решить такую ситуацию, вы используете слабые ссылки.

манекен ответ :-

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

использование Weak : - 1. Делегаты съезда 2. Пункт продажи 3. Подвиды 4. Элементы управления и т. д.

использование Strong : - Остальные везде, которые не включены в WEAK.

сильный и слабый, эти ключевые слова вращается вокруг Объект Собственности В объективе-C

что такое собственность объекта ?

переменные указателя подразумевают владение объектами, на которые они указывают.

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

каждый раз, когда переменная указателя указывает на объект, этот объект имеет владельца и останется в живых. Это известно как сильный ссылка.

переменная необязательно может быть владельцем объекта, на который она указывает. Переменная, которая не является владельцем объекта, называется слабый ссылка.

посмотрите на подробное объяснение здесь демистификация @свойства и атрибутов

здесь Документация Apple объяснила разницу между слабым и сильным свойством, используя различные примеры :

https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW3

здесь, в этом блоге автор собрал все свойства в одном месте. Это поможет сравнить характеристики свойств :

http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html

сильный по умолчанию. Объект остается "живым" до тех пор, пока на него есть сильный указатель.

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

сильный: в основном используется со свойствами, которые мы использовали для получения или отправки данных из/в другие классы. слабый: обычно все выходы, соединения слабого типа от интерфейса.

Неатомической: такие свойства используются в условиях, когда мы не хотим делиться нашим выходом или объектом в разные одновременные потоки. Другими словами, неатомный экземпляр делает наши свойства для работы с одним потоком за раз. Надеюсь, это полезно для тебя.

Comments

    Ничего не найдено.