Swift에서 크래시안나게 하는 습관
2024. 4. 15. 16:34ㆍswift
Swift에서 크래시를 안나게 하는 네가지 습관
- Optional(옵셔널)을 Optional 답게
- 먼저 바로 ! 강제 옵셔널 옵셔널을 잘쓰면 문제없다. 하지만 불편한경우가 있다 그런경우 !을 쓰게된다. as!, try!, IBOutlet ~~ UILabel!, 언랩에 관련된 !는 코드에서 존재하지 않아야한다. 50% 이상으 크래쉬가 거기서 나타난다. 묵시적언랩 일경우에는 내부적으로 옵셔널이 아닌걸로 가정하고 하고있지만 보장할순없다. IUO(옵셔널 묵시적 추출) 강제추출과 같다.
코드에서는 !를 완전히제거 해달라 이렇게하면 크래쉬가 50%는 없어진다.어레이에서 인덱스를 접근할때 어레이의 카운트를 바운즈를 체크하지않으면 100% 크래쉬var num: Int! = 4 타입에 ! 를 붙힌것이 IUO다 .. 그냥 강제추출...
- 오버 플로우 크래쉬
- 인트32,64 에서? 64에서는 멀쩡히 작동하는것이 32에서는 크래쉬가 난다. 인트 32의 범위가 벗어나기 때문에 인트라는 것들 숫자 저장? 숫자 연산시에 인트32,64 범위를 벗어나는지 확인
- 역시 어레이 바운즈 확인.
- 인트64타입을 만들때 생각보다 많이만듬 그리고 값이 크다 특정아이디가 정수인데 값이크다 실제로 클라이언트에서 들어와서 인트로 만들어져서 값을 넣다가 크래쉬가 난다
- 이것들은 swift의 언어때문에 발생하는 크래쉬 이다
- 오브젝티브씨 관계 크래쉬
- 옵젝씨같은경우 룰러블?언블러블? 지정해주지 않으면 포스트 언랩된거처럼 보인다.
- 하지만 옵젝씨가 닐을 오픈하는경우가 많다 이런경우 크래쉬가 난다. (댓글도움: nullability 이라는것을 명시해줘야 크래쉬를 필할수있다.) 이경우가 생각보다 빈번하게 발생한다.
- 옵젝씨 내부코드에서 인셉션를 발생시킨경우 그를 사용하는 스위프트에서는 방법이 없다
- 이건 에러 핸들링을 할수도없다.
- force unwap(강제추출) 하지말것, IUO도 하지말것 아이비아울렛도 ?로 변경해보자
- array를 쓸때 bound check를 꼭 하자
- 오버플로우를 주의해라. 인트32,64 범위 확인 하기 여기부분은 바로 죽기때문에 절대안된다 에러 핸들링조차 안됨.
- Objective-C와 엮인 부분에 주의해라 nullability체크 필히해야한다. 하지않으면 죽는경우가 난다.
- 옵젝씨에서 발생한 리셉션은 거기서 잡아서 핸들링하는 별도의 함수를 만들어야한다.
- 크래쉬 낮추는방법
- 인덱스 유효한 바운즈 안에 있는지 확인해야한다. 배열의 인덱스값을 잘 체크해야한다.
- 부정을 의미하는 연산자 낫연산자는 제외
'swift' 카테고리의 다른 글
SwiftUI Property Wrapper (0) | 2025.01.30 |
---|---|
가치와 원칙에 대해서 (0) | 2024.04.15 |
ARC (2) | 2024.01.08 |
ISP: 인터페이스 분리 원칙 (1) | 2023.12.03 |
LLVM 에 대해서 알아보자. (0) | 2023.09.18 |