Swift에서 크래시안나게 하는 습관

2024. 4. 15. 16:34swift

Swift에서 크래시를 안나게 하는 네가지 습관

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

'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