본문 바로가기

앱/iOS(Swift)62

[Swift] 클로저에서 self 를 사용하는 이유 클로저는 힙메모리에 있는데 만일 클로저가 ViewController 보다 메모리에 오래남아있으면 ViewController 가 사라진후 클로저를 실행하려고 하면 앱 충돌이 일어난다. 힙메모리에 없는것을 가리키기 떄문이다. weak를 사용하는 방법도 있는데 이것도 순환을 깨버릴 수 도 있다 self 를 사용하면 옵셔널 타입의 UIViewController 이 된다. 클로저에서 self 는 인자로 받는 weak self 인데 클로저 특성으로 weak self 는 생략 가능하다 2022. 2. 16.
[Swift] gesture 제스쳐: 화면을 통해 전달된 사용자의 입력 iOS에는 사용자의 입력을 제스쳐로 인식하는 추상 레이어가 있다 제스쳐는 iOS에서 UIGestureRecognizer라는 클래스의 인스턴스에 의해 인식이된다 UIGestureRecognizer 를 상속받은 클래스들이 여럿 있는데 원하는 제스쳐 종류를 쓰려고 그 서브클래스들을 생성한다 ex) panGestureReconizer 사용법 1. 어떤 UIView객체가 이 Recognizer를 받아서 해당하는 제스쳐를 인식하도록 하는것 오직 View 에서만 제스쳐를 인식할 수 있고 Controller 는 불가능 따라서 어떤 View에게 지금부터 제스쳐를 인식해달라고 부탁하는것 GestureRecognizer를 생성하고 어떤 View 에 추가하는곳은 대부분 Control.. 2022. 2. 14.
[iOS] Attributes inspector Content Mode Redraw Redraw: bounds가 바뀌면 (ex: 화면 가로에서 세로) draw를 다시호출 2022. 2. 8.
[Swift] View View: 뷰는 좌표 공간으로 정의한다. 드로잉이나 입력처리등을 할때는 정의된 좌표 공간이 필요하다. 그리고 그공간은 그리기나 터치이벤트를 처리하는데 사용된다. 모든 뷰는 결국 하나의 슈퍼뷰를 가진다. 또 자식뷰는 자식뷰를 몇개라도 가질 수 있다. UIVIew: 앱마다 하나씩밖에 없다 addSubView: 미래의 슈퍼 뷰에게 보내진다(이 뷰를 너 자신에게 추가해라) removeFromSuperView: 지우고 싶은 뷰에게 보내는것 UIView의 초기화는 조심해야한다 중요한 생성자가 2개 있기 때문 1. init(frame:CGRect) //코드사용 2. init(corder: NSCorder) //스토리보드 사용 View에 드로잉 할때는 Float나 Double를 사용하지 않고 CGFloat를 사용한다 .. 2022. 1. 29.
[Swift] awakeFromNib 뷰컨트롤러에는 생명주기가 있지만 cell 같은 것을 사용할때는 뷰컨트롤러를 사용하지 않기 때문에 뷰컨트롤러 생명주기가 없다 awakeFromNib는 swift + xib파일을 사용하거나 스토리보드에 올려놓고 불러올때 사용한다 awakeFromNib 시점에는 frame, Layer에 관련된 값들을 설정하도록 구현한다 호출순서 1. loadView view 2. viewDidLoad 3. awakeFromNib 4. viewWillAppear 5. ViewDidAppear 스위프트 파일 만들때 xib도 같이 만든다고 체크해주면 스위프트파일에 기본적으로 있음 2022. 1. 29.
[Swift] AnyObject AnyObject: 메소드 인자의 타입이 적어도 두개 이상이 될 수 있을 때 사용, 어떤 객체가 많은 타입이 될 수 있어서 무슨 타입이 될지 모를 때 사용 1. sender: AnyObject 2. cookie: 누군가한테 뭔가를 주면 그들은 그안에 뭐가 들어있는지 모르고 나도 말을 해주지 않는다 그냥 그대로 돌려받기만 하는것 3. as: 다른타입으로 변환하는걸 시도하는 표현, AnyObject를 어떤 타입 으로서(as)대하겠다는 뜻 let a: AnyObject = ... if let foo = a as? SomeClass{ SomeClass로서 사용가능 } 2022. 1. 28.