Если вы ничего не делаете с символической ссылкой, попробуйте просто прикоснуться к ссылке?
all : f-b3
init : clean
ln -s -f f-b2 s-b2
clean :
-rm f-* s-*
f-b1 :
touch f-b1 # not necessarily just touch in real makefile
f-b2 : f-b1
touch f-b2
s-b2 : f-b2
touch s-b2 # would be just this in real makefile
f-b3 : s-b2
touch f-b3
Пример make result:
$ make init
rm f-* s-*
ln -s -f f-b2 s-b2
$ make
touch f-b1
touch f-b2
touch s-b2
touch f-b3
$ touch f-b1
$ make
touch f-b2
touch s-b2
touch f-b3
$ touch f-b2
$ make
touch f-b3
Проблема в том, что категории логически отделены от своих классов и даже хранятся отдельно в двоичный файл. Внутренняя реализация заключается в том, что структура описания класса содержит массив списков методов, который изначально содержит только список методов, определенных в основном блоке @implementation
. Поскольку модули компоновщика ObjC загружают новые категории, их списки методов добавляются в этот массив.
Из-за этой реализации сами категории не имеют средств доступа к хранилищу для класса и, следовательно, не могут его изменять (это также открывает вопрос, что делать, когда категория не загружается).
Наконец, с более логической, чем технической точки зрения, идея состоит в том, что категория не имеет никакого «владения» структурой класса в памяти, она просто связывает некоторые новые методы . Для полной поддержки синтеза свойств потребуется как-то изменить хранилище класса
Решение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
сами категории не имеют средств доступа к хранилищу для класса и, следовательно, не могут его изменять (это также открывает вопрос о том, что делать, когда категория не загружена).Наконец, из более логичного, чем с технической точки зрения идея состоит в том, что категория не имеет никакого «владения» структурой класса в памяти, она просто связывает некоторые новые методы. Для полной поддержки синтеза свойств потребуется как-то изменить хранилище класса
Решение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
сами категории не имеют средств доступа к хранилищу для класса и, следовательно, не могут его изменять (это также открывает вопрос о том, что делать, когда категория не загружена).Наконец, из более логичного, чем с технической точки зрения идея состоит в том, что категория не имеет никакого «владения» структурой класса в памяти, она просто связывает некоторые новые методы. Для полной поддержки синтеза свойств потребуется как-то изменить хранилище класса
Решение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
с более логической, чем технической точки зрения, идея состоит в том, что категория не имеет никакого «владения» структурой класса в памяти, она просто связывает некоторые новые методы. Для полной поддержки синтеза свойств потребуется как-то изменить хранилище классаРешение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
с более логической, чем технической точки зрения, идея состоит в том, что категория не имеет никакого «владения» структурой класса в памяти, она просто связывает некоторые новые методы. Для полной поддержки синтеза свойств потребуется как-то изменить хранилище классаРешение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
s хранилище каким-то образомРешение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
s хранилище каким-то образомРешение? Вы либо помещаете операторы @synthesize в свой основной блок @implementation, либо просто реализуете свои собственные средства доступа непосредственно в категории @implementation.
Заданный здесь вопрос касается проблемы частного доступа. Это подходит из точки зрения, не являющейся частным доступом.