본문 바로가기
반응형

프로그래밍/Swift

Closure Memory leak with Retain Cycle Examples Objc typedef void (^MyBlock)(void); @property (nonatomic, copy) MyBlock block; - (void)viewdidLoad { [super viewDidLoad]; // Retain cycle self.block = ^{ NSLog(@"%@", self.title); }; // No retain cycle NSString *title = self.title; self.block = ^{ NSLog(@"%@", title); }; // No retain cycle @weakify(self); self.block = ^{ @strongify(self); if (!self) { return; } NSLog(@"%@", self.title); }; // No.. 더보기
swift-format 에러발생 에러메시지 : error: Unable to format ... The loaded '_InternalSwiftSyntaxParser' library is from a toolchain that is not compatible with this version of SwiftSyntax 원인 및 해결방법 1. swift-format 버전이 설치된 xcode의 Swift 버전과 호환되지 않는경우 - 해결방법 swift-format 및 xcode 버전 확인 후 swift-format을 적절한 버전으로 업그레이드 하거나 xcode를 적절한 버전으로 다운그레이드 https://github.com/apple/swift-format 2. xcode 파일 경로를 못찾는 경우 - 해결방법 1) xcode의 이름을 xco.. 더보기
swift와 objc에서 순환참조 처리하기 순환참조는 메모리누수를 발생시킬 수 있다. 따라서 weak reference를 통해 순환참조를 피할 수 있다. 예시 Swift func retainCycleHandler() { someObject.someBlock { [weak self] in guard let self = self else { return } self.navigationController?.popViewController(animated: true) } } objc - (void)retainCycleHander { __weak __typeof(self)weakSelf = self; [someObject someBlock:^ { __strong __typeof(weakSelf)self = weakSelf; if (!self) { retu.. 더보기
objc에서 swift 파일 임포트 동일 프로젝트인 경우 불러오기 - objc 파일에서 불러오기 #import "ProductName/ProductName-Swift.h" - swift 파일에서 불러오기 import ProductName 다른 프로젝트인 경우 불러오기 @import ProductName; objc 사용 허용 어노테이션 및 퍼블릭 extension UIImage { @objc public static var someImage: UIImage? } https://stackoverflow.com/a/24102880 더보기
pod install 에러 (rescue in block in activate_dependencies': Could not find 'minitest' (>= 5.1) among 39 total gem(s)) https://stackoverflow.com/a/71643456 Could not find 'minitest' (>= 5.1) among 39 total gem(s) (Gem::MissingSpecError) I m trying to install Pod on my mac os (os version is big sure), and I m using Xcode 13.1 I m trying to install Pod with this command from terminal: sudo pod install then the system ask me password, stackoverflow.com 더보기
iOS 개발자 되는 방법 2017년, 땡전 한푼 없던 나는 돈을 빌려서 200만원 가까이 되는 맥북 프로를 구매했다. 맥북으로 모바일 앱을 개발해서 광고를 올리고 돈을 벌어보고 싶다는 생각이 문득 들었기 때문이다. 무슨 자신감이었는지 빌린 200만원은 앱 개발만 끝나면 바로 갚을 수 있을 거라 생각했다. 그래서 어떻게 됐냐고? 물론 개발한 앱은 망했다. 하지만 빌린 200만원은 금방 갚았다. 왜냐면 몇 달 후 iOS 개발자로 취업했기 때문이다. 사실 애초에 플랜 A부터 C까지 준비했었다. A. iOS 앱을 개발해서 광고수익으로 부자되기 - 실패 B. 개발한 iOS 앱을 포트폴리오로 활용하여 취업하기 - 성공 C. A랑 B 둘중 하나라도 될 때까지 계속 공부 및 개발하기...? 정말로 운 좋게 플랜B에 따라 약 반년 뒤 홍콩의 F.. 더보기
[Swift] @frozen은 무슨 의미일까? @를 붙이면 자바에서는 Annotation이라고 부르던데, Swift에서는 Attributes라고 한다. 완전히 같은것인지는.. 잘 모르겠지만 비슷한것 같다. 네트워크 서비스를 구현하다가 Result라는 enum의 선언을 봤는데 @frozen이 붙어있었다. 잉 근데 도대체 이게 뭐지? 일단 얼었다는 뜻이니까.. 고정되어 있다는 것을 의미한다고 유추할 순 있었다. 그래서 찾아보니... @frozen을 붙여주면 나중에 새로운 case가 추가되지 않는걸 약속한다는 의미란다. 근데 그걸 왜 약속해야 하지? @frozen이 붙은것과 안붙은 것의 차이 @frozen이 없는 enum의 예시부터 확인해 보자. func example1(_ sizeClass: UIUserInterfaceSizeClass) { switch.. 더보기
[iOS] MVC와 MVVM에 대한 생각 현재 회사에서 iOS 앱 8개를 맡아서 업무를 하고 있다. 대부분 넘겨받은 앱들이라 기존 작성되어 있는 패턴에다가 살을 붙이는 작업이 주로 하는 업무인데, 이런 업무를 하면서 가장 문제가 되었던 부분은 단연 디자인 패턴에 있다고 생각이 든다. 앱에서 거의 대부분 MVC 패턴을 사용하고 있는데, 처음 볼륨이 작았을 때는 별로 문제가 되지 않았을지 모르지만 점점 기능들이 추가되는데도 불구하고 MVC 패턴을 유지해왔다. 그러다보니 ViewController의 내용이 점점 길어지고 복잡해져서 가독성도 떨어지고 디버깅을 하는데 아주 큰 어려움이 있다. 개인적으로는 상황에 따라 MVC와 MVVM을 혼용하는게 적절하다고 생각하고 있는데, 앱의 볼륨이 너무 커지다 보니 리팩토링이 엄두가 나지 않는 수준이 되어버렸다. .. 더보기