{"id":485227,"date":"2026-06-26T20:34:55","date_gmt":"2026-06-26T20:34:55","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485227"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485227","title":{"rendered":"Copy-on-Write \u0432 Swift: \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0430 \u0433\u043e\u0434\u044b \u044f \u0441\u0438\u0434\u0435\u043b \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0442\u043e\u043b\u0430: \u0438 \u043a\u0430\u043a \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442, \u0438 \u043a\u0430\u043a \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u2014 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e Copy-on-Write \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0438\u0434\u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0441\u043b\u044b\u0448\u0430\u043b \u0441\u043b\u043e\u0432\u043e\u00bb \u0438 \u00ab\u043f\u043e\u043d\u0438\u043c\u0430\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u00bb. \u0422\u0435\u043c\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043e\u0431\u043c\u0430\u043d\u0447\u0438\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u00ab\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\u00bb, \u2014 \u043d\u043e \u043a\u0440\u0443\u043f\u043d\u044f\u043a \u043b\u044e\u0431\u0438\u0442 \u0434\u043e\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043e\u043a: \u043d\u0435 \u00ab\u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e\u00bb, \u0430 <em>\u043a\u043e\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e<\/em> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440, <em>\u0447\u0442\u043e<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e, <em>\u043f\u043e\u0447\u0435\u043c\u0443<\/em> \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430. \u041e\u0434\u0438\u043d \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0438 \u0437\u0430 \u043d\u0435\u0433\u043e \u0442\u0443\u0442 \u0436\u0435 \u0446\u0435\u043f\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043f\u043b\u0430\u043d\u043a\u0443 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u044f\u0442\u044c \u0442\u0440\u0435\u0432\u043e\u0433\u0443: \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u0442 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u0440\u0435\u0434\u043a\u043e \u0445\u043e\u0442\u044f\u0442 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 Swift \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0438\u0442\u0430. \u0425\u043e\u0442\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c (\u00abstruct \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043e\u0431\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0441 refcount \u0432\u043d\u0443\u0442\u0440\u0438, \u043a\u043e\u043f\u0438\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0431\u0443\u0444\u0435\u0440\u00bb) \u0438 \u043c\u043e\u0433\u043b\u0438 \u0435\u0451 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0443 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u0433\u043b\u0443\u0431\u044c, \u043d\u0435 \u043f\u043b\u0430\u0432\u0430\u044f \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u0445 \u0432\u0440\u043e\u0434\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0438. \u0421\u0438\u0434\u044f \u043f\u043e \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0442\u043e\u043b\u0430, \u044f \u043e\u0442\u0441\u0435\u043a\u0430\u044e \u043d\u0435 \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0443\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0435 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u0437\u0430\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u044b, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0434\u0451\u0442 \u043e\u0442 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430 \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u043e, \u0447\u0442\u043e <em>\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e<\/em> \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c \u0442\u043e, \u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u044c.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441-\u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u043d\u0430 5 \u0441\u0442\u0440\u043e\u043a, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0451 \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"swift\">var a = [1, 2, 3]var b = a          \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u044e?b.append(4)        \/\/ \u0430 \u0442\u0435\u043f\u0435\u0440\u044c?<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0442\u0432\u0435\u0442 \u00ab\u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00bb \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u00ab\u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u0434\u0430\u00bb \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c Copy-on-Write. \u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 CoW-\u0442\u0438\u043f \u0440\u0443\u043a\u0430\u043c\u0438, \u0433\u0434\u0435 \u043e\u043d \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0438 \u0447\u0435\u043c \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 <code>struct<\/code> \u0438 <code>class<\/code>.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438.<\/p>\n<hr\/>\n<h3>\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430: 14 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438<\/h3>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Copy-on-Write?<\/h3>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0435\u043b\u0438\u0442 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (\u0431\u0443\u0444\u0435\u0440) \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043f\u0438\u044f\u043c\u0438 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0443\u0442\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f. \u0421\u043d\u0430\u0440\u0443\u0436\u0438 \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 value-\u0442\u0438\u043f\u0430, \u043f\u043e \u0446\u0435\u043d\u0435 \u2014 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0443 reference-\u0442\u0438\u043f\u0430.<\/p>\n<h3>\u0417\u0430\u0447\u0435\u043c CoW \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u0435\u043d?<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 <code>Array<\/code>, <code>String<\/code>, <code>Dictionary<\/code>, <code>Set<\/code> \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438. \u0411\u0435\u0437 CoW <code>let b = a<\/code> \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0421 CoW \u2014 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440) + \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<h3>\u041a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 CoW?<\/h3>\n<p><code>Array<\/code>, <code>ContiguousArray<\/code>, <code>String<\/code>, <code>Dictionary<\/code>, <code>Set<\/code>, <code>Data<\/code>. \u0412\u0441\u0435 \u043e\u043d\u0438 \u2014 <code>struct<\/code>-\u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c-\u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0448\u0430\u0440\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043f\u0438\u044f\u043c\u0438.<\/p>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 struct CoW \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438?<\/h3>\n<p>\u041d\u0435\u0442. CoW \u043d\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u042d\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d: <code>struct<\/code>, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043b\u0435\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043f\u043b\u044e\u0441 \u0440\u0443\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u043c\u0443\u0442\u0430\u0446\u0438\u0435\u0439. Stdlib-\u0442\u0438\u043f\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0435\u0433\u043e \u0441\u0430\u043c\u0438; \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u043f\u043e\u043b\u0443\u0447\u0438\u0442 CoW \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<h3>\u041a\u0430\u043a\u043e\u0439 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 API \u0434\u0435\u043b\u0430\u0435\u0442 CoW \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c?<\/h3>\n<p><code>isKnownUniquelyReferenced(_:)<\/code> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>inout<\/code>-\u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>true<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430. \u041d\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0438\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435\u00bb.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 isKnownUniquelyReferenced \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 inout?<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043d\u0435 \u0434\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043b\u0438\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0430 \u0431\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a. <code>inout<\/code> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 exclusive access (\u0437\u0430\u043a\u043e\u043d \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Swift) \u2014 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 isKnownUniquelyReferenced \u0441 Objective-C \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438?<\/h3>\n<p>\u041d\u0435\u0442. \u0414\u043b\u044f <code>@objc<\/code>-\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 \u043f\u043e \u043c\u043e\u0441\u0442\u0443 (bridging) \u0438\u0437 Foundation, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>false<\/code>. \u041e\u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 Swift-\u043a\u043b\u0430\u0441\u0441\u044b.<\/p>\n<h3>\u041a\u043e\u0433\u0434\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f?<\/h3>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (<code>append<\/code>, <code>subscript<\/code>-set, <code>removeLast<\/code>, &#8230;) \u0418 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0431\u0443\u0444\u0435\u0440 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0434\u043d\u0430 \u2014 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u0438\u0434\u0451\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0438.<\/p>\n<h3>\u0421\u043f\u0430\u0441\u0430\u0435\u0442 \u043b\u0438 CoW \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u0442 \u0448\u0430\u0440\u0438\u043d\u0433\u0430, \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u2014 \u043a\u043b\u0430\u0441\u0441\u044b?<\/h3>\n<p>\u041d\u0435\u0442. CoW \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b-\u043a\u043b\u0430\u0441\u0441\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0441\u044b\u043b\u043a\u0438 (\u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f). \u041e\u0431\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b-\u043a\u043b\u0430\u0441\u0441\u044b. \u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<h3>inout-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435?<\/h3>\n<p>\u041d\u0435\u0442. <code>inout<\/code> \u2014 \u044d\u0442\u043e copy-in \/ copy-out: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u0414\u043b\u044f CoW-\u0442\u0438\u043f\u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442: \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c (\u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435) \u043b\u0438\u0431\u043e \u043d\u0435\u0442.<\/p>\n<h3>\u0414\u0435\u043b\u0430\u0435\u0442 \u043b\u0438 CoW \u0442\u0438\u043f \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c?<\/h3>\n<p>\u041d\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043d\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b. \u0414\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430, \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0449\u0438\u0439 <code>Array<\/code>, \u0434\u0430\u044e\u0442 \u0433\u043e\u043d\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 UB. CoW \u2014 \u043f\u0440\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0435 \u043f\u0440\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u0427\u0435\u043c reserveCapacity \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 CoW?<\/h3>\n<p>\u0420\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0438\u044f <code>append<\/code> \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0431\u0443\u0444\u0435\u0440\u0430. \u041d\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0435 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u0446\u0438\u043a\u043b\u0430\u0445.<\/p>\n<h3>\u0412 \u0447\u0451\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 struct \u0438 class?<\/h3>\n<p><code>struct<\/code> \u2014 value-\u0442\u0438\u043f: \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 (<code>===<\/code> \u043a \u043d\u0435\u043c\u0443 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c), \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 ARC \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. <code>class<\/code> \u2014 reference-\u0442\u0438\u043f: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, lifecycle \u0447\u0435\u0440\u0435\u0437 ARC (retain\/release). CoW \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0430\u0442\u044c <code>struct<\/code> \u0434\u0435\u0448\u0451\u0432\u0443\u044e value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443, \u0437\u0430\u043d\u044f\u0432 \u0443 <code>class<\/code> \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<h3>\u0427\u0435\u043c Swift \u0432 \u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Objective-C?<\/h3>\n<p>\u0412 Objective-C \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430: <code>NSArray<\/code>, <code>NSString<\/code>, \u043b\u044e\u0431\u043e\u0439 <code>NSObject<\/code> \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 = \u043a\u043e\u043f\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f + <code>retain<\/code>, value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u044b\u043c <code>-copy<\/code> (\u0447\u0435\u0440\u0435\u0437 <code>NSCopying<\/code>). Swift \u0441\u0434\u0435\u043b\u0430\u043b value-\u0442\u0438\u043f\u044b \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u0430 CoW \u043d\u0443\u0436\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0430\u044f value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0430 \u0434\u043e\u0440\u043e\u0433\u043e.<\/p>\n<hr\/>\n<h3>\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440<\/h3>\n<h4>1. \u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442: \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0441\u0441\u044b\u043b\u043a\u0438<\/h4>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e CoW, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 <code>b = a<\/code>. \u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e \u00abstruct \u043f\u0440\u043e\u0442\u0438\u0432 class\u00bb \u043a\u0430\u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0430 \u043f\u0440\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435.<\/p>\n<p><strong>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (value semantics):<\/strong> \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u043a\u043e\u043f\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u043c. \u0422\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f <code>struct<\/code>, <code>enum<\/code>, \u043a\u043e\u0440\u0442\u0435\u0436\u0438.<\/p>\n<p><strong>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 (reference semantics):<\/strong> \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u0438\u0434\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435. \u0422\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f <code>class<\/code>, \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, <code>actor<\/code>.<\/p>\n<pre><code class=\"swift\">struct PointV { var x: Int }class  PointR { var x: Int; init(_ x: Int) { self.x = x } }var v1 = PointV(x: 1)var v2 = v1          \/\/ \u041a\u041e\u041f\u0418\u042f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044fv2.x = 99print(v1.x, v2.x)    \/\/ 1 99 \u2014 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044blet r1 = PointR(1)let r2 = r1          \/\/ \u043a\u043e\u043f\u0438\u044f \u0421\u0421\u042b\u041b\u041a\u0418r2.x = 99print(r1.x, r2.x)    \/\/ 99 99 \u2014 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p><code>==<\/code> (Equatable) \u2014 \u0440\u0430\u0432\u043d\u044b \u043b\u0438 <em>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/em>.<\/p>\n<\/li>\n<li>\n<p><code>===<\/code> \u2014 \u044d\u0442\u043e <em>\u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442<\/em> \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a reference-\u0442\u0438\u043f\u0430\u043c; \u043a <code>struct<\/code> \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f (\u0438 \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0442\u043e\u0447\u043d\u0430\u044f) \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u00abstruct \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, class \u0432 \u043a\u0443\u0447\u0435\u00bb. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 value-\u0442\u0438\u043f, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435-\u0441\u0441\u044b\u043b\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>struct<\/code> \u0441 \u043f\u043e\u043b\u0435\u043c-<code>String<\/code> \u0438\u043b\u0438 \u043f\u043e\u043b\u0435\u043c-\u043a\u043b\u0430\u0441\u0441\u043e\u043c), \u0436\u0438\u0432\u0451\u0442 \u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u0441\u0430\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u043d\u043e \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u2014 \u0432 \u043a\u0443\u0447\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 CoW.<\/p>\n<p>\u041b\u044e\u0431\u0438\u043c\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u044d\u0442\u043e \u00ab\u0441\u043d\u0430\u0440\u0443\u0436\u0438 value \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0443\u0447\u0430\u00bb \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b:<\/p>\n<pre><code class=\"swift\">class A { var a: A? }            \/\/ \u2705 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044fstruct C { var c: C? }           \/\/ \u274c \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438struct B { var b: [B]? }         \/\/ \u2705 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>class A<\/code> \u0436\u0438\u0432\u0451\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c: \u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 (\u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e), \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0438 \u0431\u044b\u043b\u043e. <code>struct C<\/code> \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2014 <code>error: value type 'C' cannot have a stored property that recursively contains it<\/code>: \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c <code>C<\/code> \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u044c <code>C<\/code> (\u0430 <code>Optional&lt;C&gt;<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 <code>C<\/code> \u0438\u043d\u043b\u0430\u0439\u043d), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c. \u0410 \u0432\u043e\u0442 <code>struct B<\/code> \u0441 \u043f\u043e\u043b\u0435\u043c <code>[B]?<\/code> \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2014 \u0438 \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: <code>Array<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u0443\u0447\u0435 \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e \u043f\u043e\u043b\u0435 <code>b<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u041c\u0430\u0441\u0441\u0438\u0432 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u00ab\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u0441 heap-\u0431\u0443\u0444\u0435\u0440\u043e\u043c\u00bb, \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u2014 \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u00abvalue \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438\u00bb, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u0438\u0442 \u0438 CoW. (\u0422\u043e\u0442 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u0430\u044e\u0442 <code>indirect enum<\/code> \u0438 \u043b\u044e\u0431\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430-\u043a\u043b\u0430\u0441\u0441.)<\/p>\n<p>\u0413\u0440\u0443\u0431\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0442\u0438\u043f\u043e\u0432 Swift:<\/p>\n<pre><code>Value semantics            Reference semantics\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500          \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500struct                     classenum                       closure (\u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435)tuple                      actorInt, Double, Bool          metatype \u043a\u043b\u0430\u0441\u0441\u043e\u0432Array, String, Dict, Set   ...(value \u0441\u043d\u0430\u0440\u0443\u0436\u0438, CoW-\u0431\u0443\u0444\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443: \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e value-\u0442\u0438\u043f\u044b <em>\u0441\u043d\u0430\u0440\u0443\u0436\u0438<\/em>, \u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0443 \u043d\u0438\u0445 reference-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Copy-on-Write.<\/p>\n<blockquote>\n<p><strong>\u0412\u0440\u0435\u0437\u043a\u0430: \u0447\u0435\u043c Swift \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Objective-C.<\/strong> \u0412 Objective-C \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u2014 <code>NSArray<\/code>, <code>NSString<\/code>, <code>NSDictionary<\/code> \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a <code>NSObject<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 <code>NSArray *b = a;<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 <code>retain<\/code>, \u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u043a\u043e\u043f\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043e\u0431\u044f\u0437\u0430\u043d \u044f\u0432\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>-copy<\/code>\/<code>-mutableCopy<\/code> (\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 <code>NSCopying<\/code>), \u0438 \u0434\u043b\u044f immutable-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code>-copy<\/code> \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 <code>retain<\/code>, \u0430 \u0434\u043b\u044f mutable \u2014 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. Value-\u0442\u0438\u043f\u043e\u0432 \u0432 ObjC \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0448\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0438 <code>struct<\/code> \u0438\u0437 C. Swift \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435: value-\u0442\u0438\u043f\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (<code>Array<\/code>, <code>String<\/code>, \u0432\u0430\u0448\u0438 <code>struct<\/code>), \u0430 \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0430\u044f value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043d\u0435 \u0443\u0431\u0438\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u0441\u0442\u0440\u043e\u0438\u043b\u0438 Copy-on-Write. \u0422\u043e \u0435\u0441\u0442\u044c CoW \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 Swift \u00ab\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0451 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f\u00bb.<\/p>\n<\/blockquote>\n<h4>2. \u041a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 CoW<\/h4>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043d\u0430\u0438\u0432\u043d\u0443\u044e value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u043f\u043e\u043b\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430:<\/p>\n<pre><code class=\"swift\">var a = [Int](repeating: 0, count: 1_000_000)var b = a   \/\/ \u0432 \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438: malloc + \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 8 \u041c\u0411var c = b   \/\/ \u0435\u0449\u0451 8 \u041c\u0411<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u2014 24 \u041c\u0411, \u0445\u043e\u0442\u044f \u043d\u0438 \u043e\u0434\u043d\u0443 \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438. \u0414\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 Swift \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0443 (\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0437\u0430\u0445\u0432\u0430\u0442), \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e.<\/p>\n<p>\u041f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0430\u044f \u043a\u0440\u0430\u0439\u043d\u043e\u0441\u0442\u044c \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 <code>class<\/code> (reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439) \u2014 \u043b\u043e\u043c\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c: \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0438 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u00ab\u043f\u0440\u043e\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u0435\u0442\u00bb \u0432 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>CoW \u2014 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441: \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043a\u0430\u043a value (\u043f\u043e\u043b\u043d\u0430\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439), \u0430 \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043a\u0430\u043a reference, <em>\u043f\u043e\u043a\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0438\u0448\u0435\u0442<\/em>. \u0426\u0435\u043b\u044c \u2014 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043a\u0435\u043c-\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d.<\/p>\n<h4>3. \u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f CoW-\u0442\u0438\u043f\u0430: struct \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043a\u043b\u0430\u0441\u0441-\u0431\u0443\u0444\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438<\/h4>\n<p>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d <code>Array<\/code>:<\/p>\n<pre><code class=\"swift\">\/\/ \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u2014 \u041a\u041b\u0410\u0421\u0421 (reference-\u0442\u0438\u043f), \u0436\u0438\u0432\u0451\u0442 \u0432 \u043a\u0443\u0447\u0435,\/\/ \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f ARC \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u0441\u044b\u043b\u043e\u043a.final class ArrayBuffer {    var elements: UnsafeMutablePointer&lt;Element&gt;    var count: Int    var capacity: Int    \/\/ ...}\/\/ \u0421\u0430\u043c Array \u2014 \u044d\u0442\u043e STRUCT (value-\u0442\u0438\u043f) \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c-\u0441\u0441\u044b\u043b\u043a\u043e\u0439.struct Array&lt;Element&gt; {    var buffer: ArrayBuffer}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 <code>var b = a<\/code>:<\/p>\n<pre><code>\u0428\u0430\u0433 1: var a = [1, 2, 3]    a (struct \u043d\u0430 \u0441\u0442\u0435\u043a\u0435)    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u2502 buffer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u25ba ArrayBuffer (\u043a\u0443\u0447\u0430), refcount = 1    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                             \u2502 refcount: 1              \u2502                             \u2502 [1, 2, 3]                \u2502                             \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u0428\u0430\u0433 2: var b = a   (\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f struct \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435-\u0441\u0441\u044b\u043b\u043a\u0430)    a \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                    \u251c\u2500\u2500\u25ba ArrayBuffer (\u043a\u0443\u0447\u0430), refcount = 2    b \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                         \u2502 refcount: 2              \u2502                         \u2502 [1, 2, 3]                \u2502                         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>b = a<\/code> \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0430 \u043e\u0434\u043d\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <code>buffer<\/code>) \u0438 \u0441\u0434\u0435\u043b\u0430\u043b ARC-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0431\u0443\u0444\u0435\u0440\u0430: <code>refcount 1 \u2192 2<\/code>. \u0414\u0451\u0448\u0435\u0432\u043e \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u2014 \u043c\u0443\u0442\u0430\u0446\u0438\u044f:<\/p>\n<pre><code>\u0428\u0430\u0433 3: b.append(4)   \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u0431\u0443\u0444\u0435\u0440 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d? refcount == 2 \u2192 \u041d\u0415\u0422.   \u0417\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0431\u0443\u0444\u0435\u0440:    a \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba ArrayBuffer #1, refcount = 1                          \u2502 [1, 2, 3]                \u2502    b \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba ArrayBuffer #2, refcount = 1  (\u0441\u0432\u0435\u0436\u0430\u044f \u043a\u043e\u043f\u0438\u044f)                          \u2502 [1, 2, 3, 4]             \u2502<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>a<\/code> \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c <code>[1, 2, 3]<\/code>, <code>b<\/code> \u0441\u0442\u0430\u043b\u0430 <code>[1, 2, 3, 4]<\/code> \u2014 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0430. \u041d\u043e \u043a\u043e\u043f\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0430\u0441\u044c.<\/p>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0431\u044b \u0441\u0441\u044b\u043b\u043a\u0430 \u0431\u044b\u043b\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439:<\/p>\n<pre><code class=\"swift\">var a = [1, 2, 3]a.append(4)   \/\/ refcount == 1 \u2192 \u0431\u0443\u0444\u0435\u0440 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u2192 \u043f\u0438\u0448\u0435\u043c \u041d\u0410 \u041c\u0415\u0421\u0422\u0415, \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Copy-on-<strong>Write<\/strong>: \u043a\u043e\u043f\u0438\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043d\u0435 \u043a \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044e, \u0430 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0431\u0443\u0444\u0435\u0440.<\/p>\n<h4>4. \u0421\u0435\u0440\u0434\u0446\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430: isKnownUniquelyReferenced<\/h4>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435\u00bb \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441: <em>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441?<\/em> \u041e\u0442\u0432\u0435\u0442 \u0434\u0430\u0451\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"swift\">func isKnownUniquelyReferenced&lt;T: AnyObject&gt;(_ object: inout T) -&gt; Bool<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>true<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 (\u0442\u0430 \u0441\u0430\u043c\u0430\u044f, \u0447\u0442\u043e \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438).<\/p>\n<pre><code class=\"swift\">final class Box {    var value: Int    init(_ value: Int) { self.value = value }}var box1 = Box(10)print(isKnownUniquelyReferenced(&amp;box1))   \/\/ true \u2014 \u043e\u0434\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430var box2 = box1                            \/\/ \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430print(isKnownUniquelyReferenced(&amp;box1))   \/\/ false \u2014 refcount == 2box2 = Box(20)                             \/\/ box1 \u0441\u043d\u043e\u0432\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043dprint(isKnownUniquelyReferenced(&amp;box1))   \/\/ true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u043d\u044e\u0430\u043d\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u044e\u0431\u044f\u0442 \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438:<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 <\/strong><code><strong>inout<\/strong><\/code><strong>?<\/strong> \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u0435\u043d \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0438 \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0430\u043c\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043b\u0438\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0430 \u0431\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0434\u043e <code>2<\/code>). <code>inout<\/code> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 exclusive access \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u0443 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Swift \u0438 \u043d\u0435 \u043f\u043b\u043e\u0434\u0438\u0442 retain. \u0415\u0441\u043b\u0438 \u0431\u044b \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0431\u0440\u0430\u043b\u0430 <code>T<\/code> \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u0431\u044b \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0438\u0434\u0435\u043b\u0430 \u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0435.<\/p>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b.<\/strong> \u0414\u043b\u044f <code>@objc<\/code>-\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 \u043f\u043e \u043c\u043e\u0441\u0442\u0443 (bridging) \u0438\u0437 Foundation, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>false<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u043e\u0439 CoW-\u0431\u0443\u0444\u0435\u0440 \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c Swift-\u043a\u043b\u0430\u0441\u0441\u043e\u043c (\u0447\u0430\u0441\u0442\u043e <code>final<\/code>).<\/p>\n<p><code><strong>weak<\/strong><\/code><strong>\/<\/strong><code><strong>unowned<\/strong><\/code><strong> \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f.<\/strong> \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438. \u0421\u043b\u0430\u0431\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u00ab\u043d\u0435\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u00bb.<\/p>\n<h4>5. \u0412\u0438\u0434\u0438\u043c CoW \u0433\u043b\u0430\u0437\u0430\u043c\u0438: \u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u0441\u044b\u043b\u043e\u043a<\/h4>\n<p>\u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0431\u0443\u0444\u0435\u0440 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0448\u0430\u0440\u0438\u0442\u0441\u044f, \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"swift\">func bufferAddress&lt;T&gt;(_ array: [T]) -&gt; UnsafeRawPointer {    array.withUnsafeBufferPointer { UnsafeRawPointer($0.baseAddress!) }}var a = [1, 2, 3]var b = aprint(bufferAddress(a))   \/\/ 0x600000abc000print(bufferAddress(b))   \/\/ 0x600000abc000  \u2190 \u0422\u041e\u0422 \u0416\u0415 \u0431\u0443\u0444\u0435\u0440, \u043a\u043e\u043f\u0438\u0438 \u043d\u0435 \u0431\u044b\u043b\u043eb.append(4)print(bufferAddress(a))   \/\/ 0x600000abc000  \u2190 a \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0435print(bufferAddress(b))   \/\/ 0x600000def000  \u2190 b \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u043d\u0430 \u043a\u043e\u043f\u0438\u044e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>(\u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u043e\u0438, \u0432\u0430\u0436\u043d\u043e \u0438\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\/\u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435.)<\/p>\n<p>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u0441\u044b\u043b\u043e\u043a. \u0414\u043b\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0435\u0441\u0442\u044c \u00ab\u043d\u0435\u0447\u0435\u0441\u0442\u043d\u044b\u0439\u00bb, \u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 refcount \u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0435:<\/p>\n<pre><code class=\"swift\">final class Storage { var data = [Int]() }let s1 = Storage()print(CFGetRetainCount(s1))   \/\/ 2 \u2014 \u043d\u0435 1! (\u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 retain'\u044b)let s2 = s1print(CFGetRetainCount(s1))   \/\/ 3 \u2014 \u043d\u0430 1 \u0431\u043e\u043b\u044c\u0448\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u00ab\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439\u00bb \u0441\u0441\u044b\u043b\u043a\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0443\u0436\u0435 \u0440\u0430\u0432\u0435\u043d <code>2<\/code>, \u0430 \u043d\u0435 <code>1<\/code> \u2014 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 retain&#8217;\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>CFGetRetainCount<\/code> \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\/\u043e\u0442\u043b\u0430\u0434\u043a\u0438: \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 retain&#8217;\u044b \u0438 \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435. \u0412\u0430\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e <em>\u0440\u0430\u0437\u043d\u0438\u0446\u0430<\/em> (+1 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443). \u0414\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0435\u0441\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u2014 <code>isKnownUniquelyReferenced<\/code>.<\/p>\n<h4>6. \u041f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 CoW-\u0442\u0438\u043f \u0440\u0443\u043a\u0430\u043c\u0438<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 value-\u0442\u0438\u043f \u0441 Copy-on-Write. \u042d\u0442\u043e \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u00ab\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f\u00bb \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 senior-\u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e.<\/p>\n<pre><code class=\"swift\">\/\/ 1. \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u2014 \u041a\u041b\u0410\u0421\u0421. \u0418\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e refcount \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c.private final class Storage {    var data: [Int]    init(_ data: [Int]) { self.data = data }    \/\/ \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043b\u043e\u043d \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f    func copy() -&gt; Storage { Storage(data) }}\/\/ 2. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0438\u043f \u2014 STRUCT \u0441 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439.struct CoWBuffer {    private var storage: Storage    init(_ data: [Int] = []) {        storage = Storage(data)    }    \/\/ \u0427\u0442\u0435\u043d\u0438\u0435 \u2014 \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0439, \u043e\u0442\u0434\u0430\u0451\u043c \u043e\u0431\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440.    var values: [Int] { storage.data }    \/\/ \u041b\u044e\u0431\u0430\u044f \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0435\u0434\u0438\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443: ensureUnique().    private mutating func ensureUnique() {        if !isKnownUniquelyReferenced(&amp;storage) {            print(\"\u2699\ufe0f \u0431\u0443\u0444\u0435\u0440 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u043f\u0438\u044e\")            storage = storage.copy()        }    }    mutating func append(_ x: Int) {        ensureUnique()        storage.data.append(x)    }    mutating func update(at index: Int, to value: Int) {        ensureUnique()        storage.data[index] = value    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"swift\">var a = CoWBuffer([1, 2, 3])var b = a                 \/\/ \u0434\u0435\u043b\u044f\u0442 \u043e\u0434\u0438\u043d Storage, \u043a\u043e\u043f\u0438\u0438 \u043d\u0435\u0442print(a.values, b.values) \/\/ [1, 2, 3] [1, 2, 3]b.append(4)               \/\/ \u2699\ufe0f \u0431\u0443\u0444\u0435\u0440 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u043f\u0438\u044eprint(a.values)           \/\/ [1, 2, 3]      \u2014 \u043d\u0435 \u0437\u0430\u0434\u0435\u0442\u0430print(b.values)           \/\/ [1, 2, 3, 4]   \u2014 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e bb.update(at: 0, to: 99)   \/\/ \u0431\u0443\u0444\u0435\u0440 b \u0443\u0436\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u2014 \u043a\u043e\u043f\u0438\u0438 \u041d\u0415 \u0431\u0443\u0434\u0435\u0442, \u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435print(b.values)           \/\/ [99, 2, 3, 4]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0442\u0440\u044f\u0442 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e:<\/p>\n<ul>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e <code>class<\/code> (\u043d\u0443\u0436\u0435\u043d refcount), \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0438\u043f \u2014 <code>struct<\/code> (\u043d\u0443\u0436\u043d\u0430 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430).<\/p>\n<\/li>\n<li>\n<p><em>\u0412\u0441\u0435<\/em> \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>ensureUnique()<\/code> <strong>\u0434\u043e<\/strong> \u0437\u0430\u043f\u0438\u0441\u0438. \u0417\u0430\u0431\u044b\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u2014 \u0441\u043b\u043e\u0432\u0438\u043b\u0438 \u043e\u0431\u0449\u0438\u0439 \u0441\u0442\u0435\u0439\u0442 \u0438 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><code>isKnownUniquelyReferenced(&amp;storage)<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b <code>storage<\/code> \u0431\u044b\u043b <code>var<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0441\u044f <code>inout<\/code> \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0436\u0438\u0432\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 <code>mutating<\/code>-\u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<h4>7. \u041f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u2014 \u0442\u043e, \u0447\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442 middle \u043e\u0442 senior<\/h4>\n<h3>7.1. struct \u0441 \u043f\u043e\u043b\u0435\u043c-\u043a\u043b\u0430\u0441\u0441\u043e\u043c: CoW \u0432\u0430\u0441 \u043d\u0435 \u0441\u043f\u0430\u0441\u0451\u0442<\/h3>\n<p>CoW \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 <em>\u0431\u0443\u0444\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/em>, \u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u00ab\u043a\u0430\u043a \u0435\u0441\u0442\u044c\u00bb. \u0415\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0430 \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442:<\/p>\n<pre><code class=\"swift\">final class Node { var value = 0 }var a = [Node()]var b = a            \/\/ \u0431\u0443\u0444\u0435\u0440 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043c\u0443\u0442\u0430\u0446\u0438\u0438, \u043d\u043e Node \u2014 \u043e\u0431\u0449\u0438\u0439b[0].value = 42      \/\/ \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u041e\u0411\u042a\u0415\u041a\u0422\u0410, \u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0430print(a[0].value)    \/\/ 42 (!) \u2014 a \u0438 b \u0434\u0435\u043b\u044f\u0442 \u043e\u0434\u0438\u043d Node<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c <code>b[0].value = 42<\/code> \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432 (\u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443\/\u0441\u043e\u0441\u0442\u0430\u0432), \u0430 \u043c\u0443\u0442\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e \u043e\u0431\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435. CoW \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0443\u0442 \u043d\u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f (shallow) \u043a\u043e\u043f\u0438\u044f. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043e <code>struct<\/code>, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u043b\u0435-\u043a\u043b\u0430\u0441\u0441: \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0432\u044b \u0434\u0435\u043b\u0438\u0442\u0435 \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<h3>7.2. \u0417\u0430\u0445\u0432\u0430\u0442 \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0438 \u043b\u043e\u043c\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435, \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0432\u0448\u0435\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440. \u041f\u043e\u043a\u0430 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0436\u0438\u0432\u043e, \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u2014 \u0438 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u0441\u0442 \u043b\u0438\u0448\u043d\u044e\u044e \u043a\u043e\u043f\u0438\u044e:<\/p>\n<pre><code class=\"swift\">var data = [1, 2, 3]let printer = { print(data) }   \/\/ \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043b\u043e data, +1 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440data.append(4)   \/\/ \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u2192 \u043a\u043e\u043f\u0438\u044f, \u0445\u043e\u0442\u044f \u00ab\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u00bb data \u043e\u0434\u043d\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u043a\u043e\u0434\u0435 \u0442\u0430\u043a\u0438\u0435 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 (\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, \u043b\u0438\u0448\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438) \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043a\u043e\u043f\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0436\u0434\u0451\u0448\u044c.<\/p>\n<h3>7.3. inout \u2014 \u044d\u0442\u043e \u043d\u0435 \u00ab\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435\u00bb<\/h3>\n<pre><code class=\"swift\">func mutate(_ arr: inout [Int]) {    arr.append(0)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>inout<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a copy-in \/ copy-out: \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u044c, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u042d\u0442\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b. \u0414\u043b\u044f CoW \u0432\u0430\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435: \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c (\u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u00ab\u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u0430\u00bb \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u0447\u0430\u0449\u0435 \u0438\u0434\u0451\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<h3>7.4. CoW \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u0438\u043f \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c<\/h3>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u2014 \u0434\u0432\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043d\u0435\u0442 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"swift\">var shared = [1, 2, 3]\/\/ \u041f\u043e\u0442\u043e\u043a 1: shared.append(4)\/\/ \u041f\u043e\u0442\u043e\u043a 2: shared.append(5)\/\/ \u2192 \u0433\u043e\u043d\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 refcount\/\u0431\u0443\u0444\u0435\u0440\u0435, \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>Array<\/code>\/<code>Dictionary<\/code>\/<code>Set<\/code> \u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b. CoW \u2014 \u043f\u0440\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0439\u0442\u0435 \u0441\u0430\u043c\u0438 (\u043e\u0447\u0435\u0440\u0435\u0434\u044c, <code>actor<\/code>, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430).<\/p>\n<h3>7.5. \u0420\u043e\u0441\u0442 \u0431\u0443\u0444\u0435\u0440\u0430, count vs capacity \u0438 reserveCapacity<\/h3>\n<p>\u041b\u044e\u0431\u0438\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430-\u00ab\u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c\u00bb:<\/p>\n<pre><code class=\"swift\">var array = [0, 1, 2]for i in 3...10_000_000_000 {   \/\/ \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u00ab\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u00bb \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0446    array.append(i)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043d\u044f\u0442\u0438\u044f. <code>count<\/code> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0441\u0435\u0439\u0447\u0430\u0441. <code>capacity<\/code> \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0435\u0437\u0435\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438. \u041a\u043e\u0433\u0434\u0430 <code>count<\/code> \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 <code>capacity<\/code>, <code>append<\/code> \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0434\u0432\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435), \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0442\u0443\u0434\u0430 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0439. \u0417\u0430 \u0441\u0447\u0451\u0442 <em>\u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e<\/em> \u0440\u043e\u0441\u0442\u0430 \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e <code>append<\/code> \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 O(1): \u0434\u0430, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0434\u043e\u0440\u043e\u0433\u0438\u0435 (\u043f\u043e\u043b\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u043d\u043e \u043e\u043d\u0438 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0451 \u0440\u0435\u0436\u0435, \u0438 \u0432 \u0441\u0443\u043c\u043c\u0435 \u043d\u0430 N \u0432\u0441\u0442\u0430\u0432\u043e\u043a \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f ~2N \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c O(1) \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<\/p>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u044e \u043b\u0435\u0433\u043a\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043f\u0435\u0447\u0430\u0442\u0430\u044f <code>capacity<\/code> \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0451 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (Swift 6, 64-\u0431\u0438\u0442):<\/p>\n<pre><code>count=1   capacity: 0 \u2192 2count=3   capacity: 2 \u2192 4count=5   capacity: 4 \u2192 8count=9   capacity: 8 \u2192 16count=17  capacity: 16 \u2192 36count=37  capacity: 36 \u2192 76count=77  capacity: 76 \u2192 156...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0440\u043e\u0441\u0442\u0430 \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u00d72 (\u0442\u043e\u0447\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u2014 \u0434\u0435\u0442\u0430\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 stdlib \u0438 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430: \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 16 \u044d\u0442\u043e \u0431\u043b\u0438\u0436\u0435 \u043a <code>2\u00b7n + 4<\/code>). \u0412\u0430\u0436\u043d\u043e \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0430 \u0441\u0430\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f: \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0442\u0451\u0442 <em>\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u043e<\/em>, \u0430 \u043d\u0435 \u043d\u0430 +1 \u0437\u0430 \u0440\u0430\u0437, \u2014 \u0438\u043d\u0430\u0447\u0435 <code>append<\/code> \u0431\u044b\u043b \u0431\u044b O(n) \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0438 O(n\u00b2) \u043d\u0430 \u0446\u0438\u043a\u043b.<\/p>\n<p>\u0427\u0442\u043e \u0446\u0435\u043f\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e\u0435\u0440 \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435:<\/p>\n<ul>\n<li>\n<p><strong>\u00ab\u041a\u0430\u0436\u0434\u044b\u0439 \u043b\u0438 <\/strong><code><strong>append<\/strong><\/code><strong> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432?\u00bb<\/strong> \u2014 \u041d\u0435\u0442. \u0420\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u0438 <code>capacity<\/code>, \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 <code>append<\/code> \u043f\u0438\u0448\u0435\u0442 \u0432 \u0443\u0436\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440. \u041f\u043b\u044e\u0441 \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0444\u0435\u0440\u0430: \u0435\u0441\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0438 \u0441 \u043a\u0435\u043c \u043d\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u2014 \u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u043a\u043e\u043f\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435\u0442 \u0432\u043e\u0432\u0441\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u00ab\u0427\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0442\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c?\u00bb<\/strong> \u2014 <code>10^10<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e 8 \u0431\u0430\u0439\u0442 \u2014 \u044d\u0442\u043e ~80 \u0413\u0411. \u041a\u043e\u0434 \u0443\u043f\u0440\u0451\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u0434\u043e\u043b\u0433\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u042d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u0437\u0434\u0440\u0430\u0432\u044b\u0439 \u0441\u043c\u044b\u0441\u043b, \u0430 \u043d\u0435 \u043d\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p><strong>\u00ab\u041a\u0430\u043a \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435?\u00bb<\/strong> \u2014 <code>reserveCapacity<\/code>. \u041e\u043d \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u043d\u0443\u0436\u043d\u043e\u0439 \u0451\u043c\u043a\u043e\u0441\u0442\u0438 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"swift\">var array = [0, 1, 2]array.reserveCapacity(1_000_000)   \/\/ \u043e\u0434\u043d\u0430 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e ~20 \u0443\u0434\u0432\u043e\u0435\u043d\u0438\u0439for i in 3..&lt;1_000_000 { array.append(i) }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0440\u043e\u0441\u0442\u0430 \u2014 \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0444\u0435\u0440 \u0432\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u0435\u0449\u0451 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d:<\/p>\n<pre><code class=\"swift\">func appendAll(to base: [Int], _ items: [Int]) -&gt; [Int] {    var result = base       \/\/ \u0434\u0435\u043b\u0438\u0442 \u0431\u0443\u0444\u0435\u0440 \u0441 base    for x in items {        result.append(x)    \/\/ \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u2014 \u043a\u043e\u043f\u0438\u044f (base \u0435\u0449\u0451 \u0436\u0438\u0432\u0430),    }                       \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435    return result}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043e\u0442\u0432\u044f\u0436\u0435\u0442 <code>result<\/code> \u043e\u0442 <code>base<\/code> (\u043e\u0434\u043d\u0430 CoW-\u043a\u043e\u043f\u0438\u044f), \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u2014 \u043d\u043e \u0440\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0443\u0442, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<h3>7.6. \u041c\u0443\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<pre><code class=\"swift\">var elements = [1, 2, 3]for e in elements {    print(e)    elements = [4, 5, 6]   \/\/ \u043f\u0435\u0440\u0435\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u0442? \u2014 <code>1 2 3<\/code>, \u0430 \u043d\u0435 <code>4 5 6<\/code>. \u0418 \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u043f\u043b\u044e\u0441 CoW.<\/p>\n<p><code>for e in elements<\/code> \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u0435\u0440\u0451\u0442 \u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 (<code>makeIterator()<\/code>), \u0430 <code>IndexingIterator<\/code> \u0434\u043b\u044f <code>Array<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 <strong>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e<\/strong> \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440. \u041a\u043e\u0433\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u043f\u0438\u0448\u0435\u043c <code>elements = [4, 5, 6]<\/code>, \u043c\u044b \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>elements<\/code> \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432; \u043a\u043e\u043f\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 <code>[1, 2, 3]<\/code>. \u0426\u0438\u043a\u043b \u0447\u0435\u0441\u0442\u043d\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u043e \u0441\u0442\u0430\u0440\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<p>\u0422\u043e\u0442 \u0436\u0435 \u0438\u0441\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438 \u043f\u0440\u0438 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"swift\">var elements = [1, 2, 3]for e in elements {    print(e)    elements.append(99)    \/\/ \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430}\/\/ \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 1 2 3; \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043f\u0438\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>append<\/code> \u0443\u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0431\u0443\u0444\u0435\u0440 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0441 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c (\u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d), \u0441\u0434\u0435\u043b\u0430\u0435\u0442 CoW-\u043a\u043e\u043f\u0438\u044e \u0434\u043b\u044f <code>elements<\/code>, \u0430 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0442\u0440\u043e\u043d\u0443\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0435. \u0412 Objective-C \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u044e\u043a \u0441 <code>NSMutableArray<\/code> (reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430) \u043a\u0438\u043d\u0443\u043b \u0431\u044b <code>NSGenericException: collection was mutated while being enumerated<\/code> \u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u043d\u0443\u043c\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0435\u043b\u044f\u0442 <em>\u043e\u0434\u0438\u043d<\/em> \u043e\u0431\u044a\u0435\u043a\u0442. \u0412 Swift \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u2014 value-\u0442\u0438\u043f, \u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0435\u0439: \u0442\u043e, \u0447\u0442\u043e \u0432 ObjC \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u043a\u0440\u0430\u0448, \u0432 Swift \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<h4>8. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 struct vs class (\u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e Objective-C)<\/h4>\n<p>CoW \u2014 \u043f\u0440\u044f\u043c\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 Swift \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u043e\u0431\u0435\u0440\u0451\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<p><code>struct<\/code> (value): \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 (<code>===<\/code> \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c), \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f ARC \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u2014 \u0443 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0441\u0441\u044b\u043b\u043e\u043a (\u043e\u043d \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u043e\u043b\u0435\u0439-\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c). <code>class<\/code> (reference): \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, lifecycle \u0447\u0435\u0440\u0435\u0437 ARC.<\/p>\n<p>CoW \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0443 \u043c\u0438\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0443 \u0432\u0435\u0449\u044c \u2014 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u0441\u044b\u043b\u043e\u043a ARC \u2014 \u0438 \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442 \u0435\u0451 \u043a value-\u0442\u0438\u043f\u0443 \u0447\u0435\u0440\u0435\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441-\u0431\u0443\u0444\u0435\u0440. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u00abstruct \u0441\u043d\u0430\u0440\u0443\u0436\u0438, refcount \u0432\u043d\u0443\u0442\u0440\u0438\u00bb: \u0434\u0435\u0448\u0451\u0432\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 reference-\u0442\u0438\u043f\u0430 \u043f\u043b\u044e\u0441 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f value-\u0442\u0438\u043f\u0430.<\/p>\n<p>\u0412 Objective-C \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0438 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e\u0439 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438: \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 (<code>NSArray<\/code>), \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043f\u0438\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 <code>-copy<\/code>\/<code>NSCopying<\/code>. Swift \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435 \u043d\u0430 \u00ab\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb \u2014 \u0438, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435 \u043d\u0435 \u0431\u0438\u043b\u043e \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432\u0441\u0442\u0440\u043e\u0438\u043b Copy-on-Write \u0432 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f: \u0432 ObjC \u0432\u044b \u043f\u043b\u0430\u0442\u0438\u043b\u0438 \u0437\u0430 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u044f\u0432\u043d\u044b\u043c <code>-copy<\/code> \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430; \u0432 Swift \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0435\u0451 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0432\u0435\u0437\u0434\u0435, \u0430 CoW \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u00ab\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u00bb \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432 \u00ab\u0434\u043e\u0440\u043e\u0433\u043e\u00bb.<\/p>\n<h4>9. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438<\/h4>\n<p><strong>\u00ab\u0427\u0442\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u043a\u043e\u0434?\u00bb<\/strong><\/p>\n<pre><code class=\"swift\">var a = [1, 2, 3]var b = ab.append(4)print(a, b)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>[1, 2, 3] [1, 2, 3, 4]<\/code>. \u041d\u0430 <code>b = a<\/code> \u043a\u043e\u043f\u0438\u0438 \u043d\u0435\u0442 (\u043e\u0431\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440), \u043d\u0430 <code>append<\/code> \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u2192 \u043a\u043e\u043f\u0438\u044f, \u043c\u0443\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>b<\/code>.<\/p>\n<p><strong>\u00ab\u0410 \u044d\u0442\u043e\u0442?\u00bb<\/strong><\/p>\n<pre><code class=\"swift\">final class Node { var v = 0 }var a = [Node()]var b = ab[0].v = 7print(a[0].v)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>7<\/code>. CoW \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 <code>Node<\/code>. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f.<\/p>\n<p><strong>\u00ab\u041f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043b\u0438 \u043c\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 struct CoW \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438?\u00bb<\/strong> \u2014 \u041d\u0435\u0442. \u042d\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d (struct + \u043a\u043b\u0430\u0441\u0441-\u0431\u0443\u0444\u0435\u0440 + <code>isKnownUniquelyReferenced<\/code>), \u0430 \u043d\u0435 \u0444\u0438\u0447\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. Stdlib-\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0435\u0433\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e; \u0432\u0430\u0448 \u0442\u0438\u043f \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0441\u0430\u043c\u0438.<\/p>\n<p><strong>\u00ab\u041a\u043e\u0433\u0434\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u0443\u0444\u0435\u0440?\u00bb<\/strong> \u2014 \u041f\u0440\u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d (refcount &gt; 1). \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u043c\u0443\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p><strong>\u00ab\u0417\u0430\u0447\u0435\u043c <\/strong><code><strong>isKnownUniquelyReferenced<\/strong><\/code><strong> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <\/strong><code><strong>inout<\/strong><\/code><strong>?\u00bb<\/strong> \u2014 \u0414\u043b\u044f \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043b\u0438\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0430 \u0431\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a.<\/p>\n<p><strong>\u00ab\u0414\u0435\u043b\u0430\u0435\u0442 \u043b\u0438 CoW \u0442\u0438\u043f \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c?\u00bb<\/strong> \u2014 \u041d\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043d\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b; \u043e\u0431\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2014 \u0433\u043e\u043d\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><strong>\u00ab\u0427\u0435\u043c <\/strong><code><strong>inout<\/strong><\/code><strong> \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435?\u00bb<\/strong> \u2014 <code>inout<\/code> \u2014 copy-in\/copy-out, \u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p><strong>\u00ab\u041a\u0430\u043a CoW \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 struct \u0438 class?\u00bb<\/strong> \u2014 CoW \u0434\u0430\u0451\u0442 value-\u0442\u0438\u043f\u0443 (<code>struct<\/code>) \u0434\u0435\u0448\u0451\u0432\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0437\u0430\u043d\u044f\u0432 \u0443 reference-\u0442\u0438\u043f\u0430 (<code>class<\/code>) \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a: \u0432\u043d\u0443\u0442\u0440\u0438 value-\u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043b\u0435\u0436\u0438\u0442 class-\u0431\u0443\u0444\u0435\u0440, \u0447\u0435\u0439 refcount \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.<\/p>\n<p><strong>\u00ab\u0427\u0435\u043c Swift \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Objective-C \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0435?\u00bb<\/strong> \u2014 ObjC \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u043d (\u043a\u043e\u043f\u0438\u044f = \u043a\u043e\u043f\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f + retain, value-\u043a\u043e\u043f\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 <code>-copy<\/code>), Swift \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u043d, \u0438 CoW \u2014 \u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0434\u0435\u0448\u0451\u0432\u044b\u043c.<\/p>\n<h4>10. \u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u00ab\u0447\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435 \u043f\u0440\u043e CoW\u00bb<\/h4>\n<ul>\n<li>\n<p>CoW = \u0434\u0435\u043b\u0438\u043c \u0431\u0443\u0444\u0435\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0438\u0448\u0435\u043c; \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0430\u0440\u0435 \u00abstruct-\u043e\u0431\u0451\u0440\u0442\u043a\u0430 + class-\u0431\u0443\u0444\u0435\u0440\u00bb; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 <code>isKnownUniquelyReferenced(&amp;storage)<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>Array<\/code>, <code>String<\/code>, <code>Dictionary<\/code>, <code>Set<\/code>, <code>Data<\/code>; \u043e\u0431\u044b\u0447\u043d\u044b\u0435 struct \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a <em>\u0437\u0430\u043f\u0438\u0441\u0438<\/em>, \u0430 \u043d\u0435 \u043a \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044e, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f: \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b-\u043a\u043b\u0430\u0441\u0441\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d; <code>inout<\/code> \u2014 copy-in\/copy-out, \u043d\u0435 \u0441\u0441\u044b\u043b\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u043e \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 Swift \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 reference-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044f Objective-C.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h4>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h4>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/apple\/swift\/blob\/main\/stdlib\/public\/core\/Array.swift\" rel=\"noopener noreferrer nofollow\">Swift stdlib: Array.swift (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f CoW-\u0431\u0443\u0444\u0435\u0440\u0430)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.apple.com\/documentation\/swift\/isknownuniquelyreferenced(_:)\" rel=\"noopener noreferrer nofollow\"><code>isKnownUniquelyReferenced(_:)<\/code> \u2014 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/apple\/swift\/blob\/main\/docs\/OwnershipManifesto.md\" rel=\"noopener noreferrer nofollow\">Swift Ownership Manifesto<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/apple\/swift-evolution\/blob\/main\/proposals\/0176-enforce-exclusive-access-to-memory.md\" rel=\"noopener noreferrer nofollow\">SE-0176: Enforce Exclusive Access to Memory<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2018\/416\/\" rel=\"noopener noreferrer nofollow\">WWDC 2018: Understanding Swift Performance<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2016\/416\/\" rel=\"noopener noreferrer nofollow\">WWDC 2016: Understanding Swift Performance (value vs reference)<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1052522\/\">https:\/\/habr.com\/ru\/articles\/1052522\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0430 \u0433\u043e\u0434\u044b \u044f \u0441\u0438\u0434\u0435\u043b \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0442\u043e\u043b\u0430: \u0438 \u043a\u0430\u043a \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442, \u0438 \u043a\u0430\u043a \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u2014 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e Copy-on-Write \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0438\u0434\u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0441\u043b\u044b\u0448\u0430\u043b \u0441\u043b\u043e\u0432\u043e\u00bb \u0438 \u00ab\u043f\u043e\u043d\u0438\u043c\u0430\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u00bb. \u0422\u0435\u043c\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043e\u0431\u043c\u0430\u043d\u0447\u0438\u0432\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u00ab\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438\u00bb, \u2014 \u043d\u043e \u043a\u0440\u0443\u043f\u043d\u044f\u043a \u043b\u044e\u0431\u0438\u0442 \u0434\u043e\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043e\u043a: \u043d\u0435 \u00ab\u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e\u00bb, \u0430 \u043a\u043e\u0433\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430. \u041e\u0434\u0438\u043d \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0438 \u0437\u0430 \u043d\u0435\u0433\u043e \u0442\u0443\u0442 \u0436\u0435 \u0446\u0435\u043f\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c.\u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043f\u043b\u0430\u043d\u043a\u0443 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u044f\u0442\u044c \u0442\u0440\u0435\u0432\u043e\u0433\u0443: \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u0442 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430 \u0440\u0435\u0434\u043a\u043e \u0445\u043e\u0442\u044f\u0442 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 Swift \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0431\u0438\u0442\u0430. \u0425\u043e\u0442\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c (\u00abstruct \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043e\u0431\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0441 refcount \u0432\u043d\u0443\u0442\u0440\u0438, \u043a\u043e\u043f\u0438\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0431\u0443\u0444\u0435\u0440\u00bb) \u0438 \u043c\u043e\u0433\u043b\u0438 \u0435\u0451 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0443 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u0433\u043b\u0443\u0431\u044c, \u043d\u0435 \u043f\u043b\u0430\u0432\u0430\u044f \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u0445 \u0432\u0440\u043e\u0434\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0438. \u0421\u0438\u0434\u044f \u043f\u043e \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0442\u043e\u043b\u0430, \u044f \u043e\u0442\u0441\u0435\u043a\u0430\u044e \u043d\u0435 \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0443\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0435 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u0437\u0430\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0437\u044b, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0442\u044c\u044f \u0438\u0434\u0451\u0442 \u043e\u0442 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430 \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c \u0442\u043e, \u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u044c.\u0412\u043e\u043f\u0440\u043e\u0441-\u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u043d\u0430 5 \u0441\u0442\u0440\u043e\u043a, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0451 \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f:var a = [1, 2, 3]var b = a          \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0434 \u043a\u043e\u043f\u0438\u044e?b.append(4)        \/\/ \u0430 \u0442\u0435\u043f\u0435\u0440\u044c?\u041e\u0442\u0432\u0435\u0442 \u00ab\u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00bb \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u00ab\u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u0434\u0430\u00bb \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c Copy-on-Write. \u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 CoW-\u0442\u0438\u043f \u0440\u0443\u043a\u0430\u043c\u0438, \u0433\u0434\u0435 \u043e\u043d \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0438 \u0447\u0435\u043c \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 struct \u0438 class.\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f, \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438.\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430: 14 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Copy-on-Write?\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0435\u043b\u0438\u0442 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (\u0431\u0443\u0444\u0435\u0440) \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u043f\u0438\u044f\u043c\u0438 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0443\u0442\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f. \u0421\u043d\u0430\u0440\u0443\u0436\u0438 \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 value-\u0442\u0438\u043f\u0430, \u043f\u043e \u0446\u0435\u043d\u0435 \u2014 \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0443 reference-\u0442\u0438\u043f\u0430.\u0417\u0430\u0447\u0435\u043c CoW \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u0435\u043d?\u0427\u0442\u043e\u0431\u044b value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 Array, String, Dictionary, Set \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438. \u0411\u0435\u0437 CoW let b = a \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0421 CoW \u2014 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440) + \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0441\u0441\u044b\u043b\u043e\u043a.\u041a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 CoW?Array, ContiguousArray, String, Dictionary, Set, Data. \u0412\u0441\u0435 \u043e\u043d\u0438 \u2014 struct-\u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c-\u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0448\u0430\u0440\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043f\u0438\u044f\u043c\u0438.\u041f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 struct CoW \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438?\u041d\u0435\u0442. CoW \u043d\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u042d\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d: struct, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043b\u0435\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043f\u043b\u044e\u0441 \u0440\u0443\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u043c\u0443\u0442\u0430\u0446\u0438\u0435\u0439. Stdlib-\u0442\u0438\u043f\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0435\u0433\u043e \u0441\u0430\u043c\u0438; \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u043f\u043e\u043b\u0443\u0447\u0438\u0442 CoW \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438.\u041a\u0430\u043a\u043e\u0439 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 API \u0434\u0435\u043b\u0430\u0435\u0442 CoW \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c?isKnownUniquelyReferenced(_:) \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 inout-\u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430. \u041d\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0438\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435\u00bb.\u041f\u043e\u0447\u0435\u043c\u0443 isKnownUniquelyReferenced \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 inout?\u0427\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043d\u0435 \u0434\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043b\u0438\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0430 \u0431\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a. inout \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 exclusive access (\u0437\u0430\u043a\u043e\u043d \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Swift) \u2014 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c.\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 isKnownUniquelyReferenced \u0441 Objective-C \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438?\u041d\u0435\u0442. \u0414\u043b\u044f @objc-\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 \u043f\u043e \u043c\u043e\u0441\u0442\u0443 (bridging) \u0438\u0437 Foundation, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 false. \u041e\u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 Swift-\u043a\u043b\u0430\u0441\u0441\u044b.\u041a\u043e\u0433\u0434\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f?\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (append, subscript-set, removeLast, &#8230;) \u0418 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0431\u0443\u0444\u0435\u0440 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0434\u043d\u0430 \u2014 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u0438\u0434\u0451\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0438.\u0421\u043f\u0430\u0441\u0430\u0435\u0442 \u043b\u0438 CoW \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u0442 \u0448\u0430\u0440\u0438\u043d\u0433\u0430, \u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u2014 \u043a\u043b\u0430\u0441\u0441\u044b?\u041d\u0435\u0442. CoW \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b-\u043a\u043b\u0430\u0441\u0441\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0441\u044b\u043b\u043a\u0438 (\u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f). \u041e\u0431\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b-\u043a\u043b\u0430\u0441\u0441\u044b. \u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.inout-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435?\u041d\u0435\u0442. inout \u2014 \u044d\u0442\u043e copy-in \/ copy-out: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u0414\u043b\u044f CoW-\u0442\u0438\u043f\u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442: \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c (\u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435) \u043b\u0438\u0431\u043e \u043d\u0435\u0442.\u0414\u0435\u043b\u0430\u0435\u0442 \u043b\u0438 CoW \u0442\u0438\u043f \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c?\u041d\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043d\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b. \u0414\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430, \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0449\u0438\u0439 Array, \u0434\u0430\u044e\u0442 \u0433\u043e\u043d\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 UB. CoW \u2014 \u043f\u0440\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0435 \u043f\u0440\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e.\u0427\u0435\u043c reserveCapacity \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 CoW?\u0420\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0435\u0440\u0438\u044f append \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0431\u0443\u0444\u0435\u0440\u0430. \u041d\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0435 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u0446\u0438\u043a\u043b\u0430\u0445.\u0412 \u0447\u0451\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 struct \u0438 class?struct \u2014 value-\u0442\u0438\u043f: \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 (=== \u043a \u043d\u0435\u043c\u0443 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c), \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 ARC \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. class \u2014 reference-\u0442\u0438\u043f: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, lifecycle \u0447\u0435\u0440\u0435\u0437 ARC (retain\/release). CoW \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0430\u0442\u044c struct \u0434\u0435\u0448\u0451\u0432\u0443\u044e value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443, \u0437\u0430\u043d\u044f\u0432 \u0443 class \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a.\u0427\u0435\u043c Swift \u0432 \u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Objective-C?\u0412 Objective-C \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430: NSArray, NSString, \u043b\u044e\u0431\u043e\u0439 NSObject \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 = \u043a\u043e\u043f\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f + retain, value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u044b\u043c -copy (\u0447\u0435\u0440\u0435\u0437 NSCopying). Swift \u0441\u0434\u0435\u043b\u0430\u043b value-\u0442\u0438\u043f\u044b \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u0430 CoW \u043d\u0443\u0436\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0430\u044f value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0430 \u0434\u043e\u0440\u043e\u0433\u043e.\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u04401. \u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442: \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0441\u0441\u044b\u043b\u043a\u0438\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e CoW, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 b = a. \u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e \u00abstruct \u043f\u0440\u043e\u0442\u0438\u0432 class\u00bb \u043a\u0430\u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0430 \u043f\u0440\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435.\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (value semantics): \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u043a\u043e\u043f\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u043c. \u0422\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f struct, enum, \u043a\u043e\u0440\u0442\u0435\u0436\u0438.\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 (reference semantics): \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u0438\u0434\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0435. \u0422\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f class, \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, actor.struct PointV { var x: Int }class  PointR { var x: Int; init(_ x: Int) { self.x = x } }var v1 = PointV(x: 1)var v2 = v1          \/\/ \u041a\u041e\u041f\u0418\u042f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044fv2.x = 99print(v1.x, v2.x)    \/\/ 1 99 \u2014 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044blet r1 = PointR(1)let r2 = r1          \/\/ \u043a\u043e\u043f\u0438\u044f \u0421\u0421\u042b\u041b\u041a\u0418r2.x = 99print(r1.x, r2.x)    \/\/ 99 99 \u2014 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u0421 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430:== (Equatable) \u2014 \u0440\u0430\u0432\u043d\u044b \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.=== \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a reference-\u0442\u0438\u043f\u0430\u043c; \u043a struct \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438.\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f (\u0438 \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0442\u043e\u0447\u043d\u0430\u044f) \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u00abstruct \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, class \u0432 \u043a\u0443\u0447\u0435\u00bb. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 value-\u0442\u0438\u043f, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435-\u0441\u0441\u044b\u043b\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, struct \u0441 \u043f\u043e\u043b\u0435\u043c-String \u0438\u043b\u0438 \u043f\u043e\u043b\u0435\u043c-\u043a\u043b\u0430\u0441\u0441\u043e\u043c), \u0436\u0438\u0432\u0451\u0442 \u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u0441\u0430\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u043d\u043e \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u2014 \u0432 \u043a\u0443\u0447\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 CoW.\u041b\u044e\u0431\u0438\u043c\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b \u044d\u0442\u043e \u00ab\u0441\u043d\u0430\u0440\u0443\u0436\u0438 value \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0443\u0447\u0430\u00bb \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b:class A { var a: A? }            \/\/ \u2705 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044fstruct C { var c: C? }           \/\/ \u274c \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438struct B { var b: [B]? }         \/\/ \u2705 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044fclass A \u0436\u0438\u0432\u0451\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c: \u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 (\u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e), \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0438 \u0431\u044b\u043b\u043e. struct C \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2014 error: value type &#8216;C&#8217; cannot have a stored property that recursively contains it: \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c C \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u044c C (\u0430 Optional&lt;C&gt; \u0445\u0440\u0430\u043d\u0438\u0442 C \u0438\u043d\u043b\u0430\u0439\u043d), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c. \u0410 \u0432\u043e\u0442 struct B \u0441 \u043f\u043e\u043b\u0435\u043c [B]? \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2014 \u0438 \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: Array \u0445\u0440\u0430\u043d\u0438\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u0443\u0447\u0435 \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u043e \u043f\u043e\u043b\u0435 b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u041c\u0430\u0441\u0441\u0438\u0432 \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u00ab\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u0441 heap-\u0431\u0443\u0444\u0435\u0440\u043e\u043c\u00bb, \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u2014 \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u00abvalue \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438\u00bb, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u043e\u0438\u0442 \u0438 CoW. (\u0422\u043e\u0442 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u0430\u044e\u0442 indirect enum \u0438 \u043b\u044e\u0431\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430-\u043a\u043b\u0430\u0441\u0441.)\u0413\u0440\u0443\u0431\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0442\u0438\u043f\u043e\u0432 Swift:Value semantics            Reference semantics\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500          \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500struct                     classenum                       closure (\u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435)tuple                      actorInt, Double, Bool          metatype \u043a\u043b\u0430\u0441\u0441\u043e\u0432Array, String, Dict, Set   &#8230;(value \u0441\u043d\u0430\u0440\u0443\u0436\u0438, CoW-\u0431\u0443\u0444\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438)\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u043a\u0443: \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e value-\u0442\u0438\u043f\u044b \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0443 \u043d\u0438\u0445 reference-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0433\u0438\u0431\u0440\u0438\u0434, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Copy-on-Write.\u0412\u0440\u0435\u0437\u043a\u0430: \u0447\u0435\u043c Swift \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 Objective-C. \u0412 Objective-C \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u0435\u0442 reference-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u2014 NSArray, NSString, NSDictionary \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a NSObject \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 NSArray *b = a; \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 retain, \u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u043a\u043e\u043f\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043e\u0431\u044f\u0437\u0430\u043d \u044f\u0432\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c -copy\/-mutableCopy (\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 NSCopying), \u0438 \u0434\u043b\u044f immutable-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 -copy \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 retain, \u0430 \u0434\u043b\u044f mutable \u2014 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. Value-\u0442\u0438\u043f\u043e\u0432 \u0432 ObjC \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0448\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0438 struct \u0438\u0437 C. Swift \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u043b \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u0435: value-\u0442\u0438\u043f\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u044b\u043c\u0438 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (Array, String, \u0432\u0430\u0448\u0438 struct), \u0430 \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0430 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0430\u044f value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043d\u0435 \u0443\u0431\u0438\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u0441\u0442\u0440\u043e\u0438\u043b\u0438 Copy-on-Write. \u0422\u043e \u0435\u0441\u0442\u044c CoW \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 Swift \u00ab\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0451 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f\u00bb.2. \u041a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 CoW\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043d\u0430\u0438\u0432\u043d\u0443\u044e value-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u0431\u0435\u0437 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u043f\u043e\u043b\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430:var a =&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485227","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485227"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485227\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}