분류 전체보기
-
단일 프로그래밍의 메모리 할당운영체제 2022. 7. 6. 13:01
메모리 오버레이(memory overlay) 과거의 컴퓨터의 경우 메모리의 용량이 한정적이었기 때문에 전체 메모리 용량보다 큰 사용자 프로그램을 어떻게 실행하느냐가 문제였다. 따라서 프로그램을 적당한 크기로 잘라서 일부만 가져오는 기법을 사용하였는데, 이를 메모리 오버레이라 한다. 이 기법의 경우 프로그램을 여러 개의 모듈로 나눈 다음, 각 모듈을 필요할 때마다 메모리에 가져와 사용한다. 어떤 모듈을 가져오고 내보낼지는 프로그램 카운터가 결정한다. 앞으로 실행할 명령어의 위치를 가지고 있기 때문에, 해당 명령어를 가지는 모듈이 메모리에 없으면 메모리 관리자에 요청하여 메모리로 가져오게 한다. 스왑(swap) 다른 모듈을 사용하게 된다면, 결국 이전에 사용했던 모듈은 메모리에서 내보내야 할 것이다. 내보내..
-
UITableViewiOS/UIKit 2022. 7. 6. 00:21
생성 table view를 추가한 다음, 안에 prototype cell을 추가하자. Style, Selection, Accessory 등으로 cell의 형태를 정의할 수 있다. 물론 Style을 Custom으로 설정하여 개발자가 자신의 스타일을 적용할 수 있다. 그러나 코드에서 cell을 다루기 위해 반드시 설정해야 하는 것은 바로 Identifier이다. (Selection은 유저가 각 cell을 클릭했을 때 effect를 설정한다. Default로 설정하면 클릭한 cell이 회색으로 변할 것이고, None이면 아무 변화가 없을 것이다. cell을 커스터마이징 후 table view에 추가하기 우선 각 채팅 메시지에 해당하는 Message 구조체를 추가하자. struct Message { let se..
-
Navigation Controller + SeguesiOS/Xcode + Storyboard 2022. 7. 5. 20:44
앱의 첫 화면에 해당하는 view controller 설정 화살표를 옮기거나 특정 view controller에서 Is Initial View Controller를 체크하면 된다. 버튼을 통하여 segue 설정 버튼을 클릭하면 무조건적으로 다른 화면으로 이동하는 segue를 설정하고자 하면, 버튼을 선택한 상황에서 control 키를 누르고 이동하고자 하는 view controller로 드래그 하면 된다. navigation stack 설정 navigation stack 상에서 최상위 화면을 선택하고 navigation controller로 embed하자. 그러면 최상위 화면을 비롯하여 modal로 처리되었던 하위 화면들이 navigation bar를 가질 것이다. 앱을 실행하면서 하위 화면들로 이동하면..
-
온보딩 화면 구성 - (1)iOS/UIKit 2022. 7. 4. 10:44
Paging 구성 우선 다음 코드를 작성하자. class OnboardingContainerViewController: UIViewController { let pageViewController: UIPageViewController var pages = [UIViewController]() // child view controller들을 담아두는 역할 var currentVC: UIViewController { didSet { } } override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { self.pageViewController = UIPageViewController(transitionStyle: .scroll, ..
-
메모리 관리 및 메모리 주소운영체제 2022. 7. 3. 22:14
메모리 관리 CPU는 메모리에서 데이터를 읽거나 쓰기 위해 메모리 주소 레지스터(MAR)를 사용한다. 폰노이만 구조에서는 모든 프로그램은 메모리에 올려야 실행할 수 있다. 오늘날 컴퓨터의 경우 운영체제를 포함한 여러 프로그램을 동시에 실행하기 때문에 이 모든 프로그램들이 메모리에 같이 올라가 있다. 또한 메모리의 크기는 제한적이기 때문에, 메모리 관리가 복잡하다. 이렇게 메모리에 올려서 프로그램을 실행하는 이유는 컴퓨터가 계층적 메모리 구조를 가지기 때문이다. 저장장치에는 모든 프로그램이 저장되어 있지만, 속도가 느려서 CPU와의 속도 차이로 인한 문제가 발생한다. 이러한 속도 차이를 완화하기 위해 메모리에 올리는 것이다. 메모리 관리자의 역할 메모리 관리를 담당하는 메모리 관리자의 역할은 다음과 같다...
-
로그인 화면 구성하기 - (2)iOS/UIKit 2022. 6. 30. 01:08
버튼 추가하기 두개의 text field가 들어간 stack이 y축 상에서 가운데 오도록 처리해야 하기 때문에, 해당 text field들만 login view 안에 넣고 나머지 요소들은 view controller에서 추가하자. 우선 signInButton을 추가하자. class LoginViewController: UIViewController { let loginView = LoginView() let signInButton = UIButton(type: .system) // ... } extension LoginViewController { private func style() { loginView.translatesAutoresizingMaskIntoConstraints = false signI..
-
로그인 화면 구성하기 - (1)iOS/UIKit 2022. 6. 30. 00:20
사전 작업: 프로젝트 구성 Asset, Info.plist 등은 경로가 최상위 디렉토리여야 한다. 그렇지 않으면 문제가 발생할 수 있다. 그러나 grouping을 하여 필요한 파일만 보게 하고 싶다면 New Group without Folder를 선택하여 Group를 생성하여 넣어주면 된다. 아래 사진의 Files의 경우 폴더 없이 생성된 그룹이어서 다른 그룹과 살짝 다르게 생긴 것을 볼 수 있다. LoginView 생성 아래 코드를 작성하자. Code Snippet으로 저장해놓자. class LoginView: UIView { override init(frame: CGRect) { super.init(frame: frame) // style과 layout을 분리하여 작성 style() layout() ..
-
Storyboard 없는 프로젝트 설정 방법iOS/UIKit 2022. 6. 29. 20:55
파일 제거 SceneDelegate.swift와 Main.storyboard를 삭제한다. info.plist 수정 navigator pane에서 검색 탭에 main을 입력하여 INFOPLIST_KEY... 둘 중 하나를 선택하고, 그 다음 오른쪽 검색바에서 main을 검색한다. 그 다음 유일하게 나오는 줄을 클릭한 상태에서 Delete 키를 눌러서 제거한다. 그 다음 맨 왼쪽 검색 결과의 마지막 항목을 클릭한 다음 Application Scene Manifest를 선택한 상태에서 Delete를 눌러 제거한다. AppDelegate.swift 수정 기존에 있던 모든 메서드를 제거한다. 그 다음 아래 코드를 작성한다. 이 코드를 code snippet으로 저장해놓자. 해당 코드를 마우스로 지정한 다음 오른쪽..