본문 바로가기

반응형

분류 전체보기

클래스 내에 멤버 변수를 사용할 때 초기화 시점에 따른 메모리 차지 비교 인스턴스 label1 은 선언과 동시에 초기화 label2 은 선언과 초기화를 분리하고 viewDidLoad 에서 초기화 설명 프로그래밍 방식의 UI 생성을 연습하기 위해 작성한다면 아래와 같은 코드는 큰 차이점이 없습니다. 하지만 뷰 컨트롤러의 인스턴스만 생성한 후 화면으로 이동하지 않는다면 label1 인스턴스는 메모리만 차지하게 됩니다. 반면, label2 인스턴스는 뷰 컨트롤러가 화면에 표시될 때 인스턴스가 생성되므로 메모리를 미리 차지하지 않습니다. 즉, 특별한 경우를 제외하고 클래스 내에 멤버 변수로 인스턴스를 사용한다면 label2 처럼 사용하기 직전에 인스턴스를 생성하여 메모리를 할당 받는 것이 메모리를 효율적으로 사용할 수 있습니다. 코드 #import UIKit class Cust.. 더보기
Swift 코드 작성시 변수와 함수 순서 정답은 아니지만, 보편적으로 호출순서 혹은 변수부터 함수순으로 정의합니다. 현재 사용하는 순서는 다음과 같습니다. let, var @IBOutlet ViewDidLoad @IBAction function 더보기
프로토타입 셀 제어 두가지 방법 : tag in attribute inspector , custom class 제어방법 1 : tag in attribute inspector 제어방법 2 : custom class 아울렛 변수를 뷰 컨트롤러에 직접 정의하면 셀 내부 객체들이 정적인 객체가 되므로 사용하는데에 문제가 생깁니다. 커스텀 클래스에 아울렛 변수를 정의하면 이는 동적으로 사용할 수 있는 형태의 객체가 되기 때문에 아울렛 변수를 통해 객체를 관리할 수 있습니다. 따라서 태그 속성 사용 시 단점으로 꼽히는 객체 관리 문제나 잘못된 태그값을 호출하는 문제로부터 자유로워질 수 있으며, 유지 보수도 무척 편리해집니다. 방법 UITableViewCell 을 상속 받는 클래스 작성 스토리보드에서 프로토타입 셀의 Class 속성을.. 더보기
이미지 사용 용도에 따른 UIImage 생성자 선택 생성자 종류 1. Loading and Caching Images init?(named: String, in: Bundle?, compatibleWith: UITraitCollection?) init?(named: String) init(imageLiteralResourceName: String) 2. Creating and Initializing Image Objects init?(contentsOfFile: String) init?(data: Data) init?(data: Data, scale: CGFloat) init(cgImage: CGImage) init(cgImage: CGImage, scale: CGFloat, orientation: UIImage.Orientation) init(ciIma.. 더보기
Status Bar 색상 지정 방법 두가지 방법이 있지만 첫번째 방법은 권장하지 않음 앱 전체에 대해 설정 info.plist - View controller-based status bar appearance - NO AppDelegate 에 아래 코드 작성func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { application.statusBarStyle = .lightContent // .default return true } 각 뷰 컨트롤러에 대해 설정 Defalut 는 No (그러나 위에서 info.plist를 건들였다면 를 Vie.. 더보기
@IBAction, 뷰끼리 값전달, 델리게이트, 최초 응답자 간단한 정보 @IBAction 타입 지정할 때 기준 개별 타입을 선택해야 할 때 액션 메소드를 호출한 컨트롤의 속성값이 필요하거나, 이를 제어해야 할 때 Any 타입을 선택해야 할 때 서로 다른 타입의 컨트롤이 동일한 액션 메소드를 호출하게끔 처리하고 싶을 때 액션 메소드를 호출한 컨트롤의 정보가 필요 없을 때 개별 타입을 반드시 사용해야 하는 경우를 제외한 나머지 모든 경우 뷰 사이에서 값 전달할 때 프로퍼티로 받는 이유 A뷰에서 B뷰로 값을 넘길 때 아울렛 변수에 바로 받지 않고 프로퍼티에 받는 이유는 아울렛 변수는 외부에서 값을 직접 대입할 수 없는 변수이기 때문입니다. 또한, 아울렛 변수는 외부 객체에서 직접 참조할 수 없도록 제한되어 있습니다. 즉 private 변수로 생성되어 있다고 생각하면 될 것 같습니.. 더보기
*.pbxproj 삭제 했을 때 대처하는 방법 *.pbxproj 삭제 했을 때 대처하는 방법 (단, Git Commit 존재해야 합니다) 대처방법1. Git reset 명령어 이용해서 gitignore 에 pbxproj 파일 제외하기 바로 이전 커밋으로 돌아가서 project.pbxproj 파일 복사2. 다시 최근 커밋으로 돌아옵니다.3. 프로젝트 파일 - .xcodeproj 파일 오른쪽 클릭 - 패키지 내용보기 - .pbxproj 파일 붙여넣기4. 3번에서 project.xcworkspace 삭제5. 3번에서 xcuserdata 폴더 아래 username.xcuserdatad 파일 삭제6. 돌아가서 .xcodeproj 파일 들어가서 실행하면 fail 뜨는데 pods 파일 때문에 해당 파일로 열면 안되는 것 같습니다.에러 메세지 : framework.. 더보기
Switch 사용하면서 값이 배열 안에 있는지 확인하는 방법 아래와 같은 코드가 있을 때 value 를 foo or bar 배열에 존재하는지 확인하는 방법 let foo = [1, 2, 3] let bar = [4, 5, 6] let value = 5 1. ~= 연산자 만들기 func ~=(array: [T], value: T) -> Bool { return array.contains(value) } let foo = [1, 2, 3] let bar = [4, 5, 6] let value = 5 switch value { case foo: print("in foo") case bar: print("in bar") default: break } 2. where 문 사용 let foo = [1, 2, 3] let bar = [4, 5, 6] let value = 5 .. 더보기

반응형