Swift 문자열은 어떻게 저장합니까?조사해 보았다

4236 단어 Swift
안녕하세요.센다이 iOS 개발자 학습회(SWDC) Advent Calendar 2014 8일째 보도다.
유용해 보이지만 효과가 없는 스위프트의 문자열이 메모리에 어떻게 저장되는지 조사해 봤다.

Swift 문자열은 어떻게 됩니까?


스위프트는 Objective-C의 래퍼라는 인상 때문에 아마 Objective-C와 비슷할 거예요.그렇게 말하지만 Objective-C 자체도 잘 모르겠어요.

Swift의 문자열은 Java와 같은 저장소입니다


결론은 자바와 마찬가지로 문자열은 더미에 저장되고 같은 문자열을 정의했다면 같은 주소를 참조한다.
'자바와 같다'는 애매한 표현은 자바에'스트링 상수 풀'이 있기 때문에 스위프트와 Objective-C에 이런 구조가 있는지 모르겠다.
그리고 자바에는 가비 컬렉션이 있지만 스위프트와 Objective-C에도 ARC의 구조가 다르다.
일본어로 하는 말이 뭔지 잘 모르기 때문에 플레이그라운드가 실행하는 샘플 코드와 결과를 보시기 바랍니다.

let과 var로 같은'Hello'문자열을 발표했지만 모두 같은 주소를 가리킨다.여기서 요점은 String._core._baseAddress의 비공개 프로퍼티즈 확인이다.[NSString format:] 얻으려고 할 때 아래처럼 매번 다른 주소를 얻으며 빠져든다.

문자열을 병합하여 다른 주소를 확보하다


다음 문자열을 병합한 예를 보십시오.첫 번째 샘플 코드 다음에 우리는letstr와varstr를 결합시켰다.letstr의 주소는 변하지 않지만 문자열을 조합한 varstr의 주소는 변경되었습니다.

스위프트의 스트링은 값!


나는 이것에 대해 아무런 자신감이 없다. 참고서에 이렇게 쓰여 있다.저자는 강조 표시를 편집했습니다.
Strings Are Value Types
Swift’s String type is a value type. If you create a new String value, that String value is copied when it is passed to a function or method, or when it is assigned to a constant or variable.
(후략)
뜻밖에도 Swift의 String은 값형(value type)이다.따라서 단순히 format로 표시하면 매번 다른 주소가 된다.하지만 뒷면에는 같은 주소로 잘 보관돼 있다.너는 정말 똑똑하다.스위프트가 Objective-C의 단순한 나팔구일 뿐이라고 생각한다면 그건 아닌 것 같아요.
이런 구조를 Copy-on-write라고 하는데 잘 모르겠어요.Aray에 관하여 @koher선생님은 저는 스위프트에서 Copy-on-Write는 문제가 안 될 것 같아요. - Qita.에서 총결하였으니 참고하십시오.

결론:그럼,뭐가 좋으세요?


앞에서 말한 바와 같이 유용한 정보이지만 대다수 사람들에게는 쓸모가 없을 것 같다.
퍼포먼스 튜닝에서 그렇게 신경 써도 수나초만 짧아지는 것 같아서 DB나 네트워크를 통해 수밀리초를 줄이려고 노력해야 한다.
저한테 얻은 건 스트링이에요.코어라는 숨겨진 속성을 발견한 거 아닐까요?아, 하지만 프로그램을 검사할 때는 꺼야 해요.인용에 없는 숨겨진 속성의 사용이 100% 재설정되기 때문입니다.

SWWDC 정보


원래는 SWWDC 멤버@ktanaka117씨의 뜻밖의 질문이었는데, 이 기사의 소재가 나왔다.
어디를 생략해도 SWDC로 변하고, 실제로 작업 중 애플리케이션을 만드는 사람들이 몰리기 때문에 종이 개발자(앱을 게시한 적이 없다)인 자신에게는 자극적이고 개인적으로 좋아하는 학습회 중 하나다.
만약 여러분들이 휴대전화 서비스로 앱을 제작할 수 있다면 저는 할 말이 없습니다.
매달 한 번씩 학습회를 열기 때문에, 관심 있는 사람은 참가해 주십시오IOSendai 개발자 그룹.

참조 링크


Java-sturing 클래스
Effective Objective C2.0에 대한 간단한 설명
Printing a variable memory address in swift - Stack Overflow
The Swift Programming Language: Strings and Characters
저는 스위프트에서 Copy-on-Write는 문제가 안 될 것 같아요. - Qita.

좋은 웹페이지 즐겨찾기