donaricano-btn

swift를 이용한 아이폰 개발 - for-in 문의 활용


1. stride() 를 이용한 반복 문 간격 조정

- stride()는 반복 문에 있는 변수 간격을 조정하여 출력할 수 있다


2. 스트링에서 순서대로 한 글자씩 출력하는 for-in 문자열

-  characters 프로퍼티를 이용하면 한 글자씩 출력이 가능하다

     


3. 반복문의 라벨을 붙여 break, continue 를 컨트롤 한다

- swift에서 for문 이나 while 문의 라벨을 붙여 자유롭게 시작과 끝점을 컨트롤 할 수 있다.

    

'iOs > swift' 카테고리의 다른 글

[ios] swift - 함수의 매개변수  (0) 2018.01.21
[ios] swift - 함수정의와 종료처리  (0) 2018.01.21
블로그 이미지

리딩리드

,
donaricano-btn

Future, Callable, Executor를 이용한 Thread


1. ExecutorService

-  자바5에서 멀티스레드와 콜백을 간편하게 사용하기 위하여 ExecutorService를 사용한다.

1) 사용법

- 작업 대상의 Callable 객체를 만들고 ExecutorService에 등록한 다음 Future 객체를 반환 받는다.

- 작업 결과는 Future를 통해 얻는다.


2. 예제

1) FindMax.java

- 값을 비교하여 max값을 반환 한다.

- Callable 인터페이스는 어떤 값도 반환하는 call() 를 제공한다.


2) MultiThreadMaxFinder.java

- Callable 객체를 Executor 에 추가하여 사용한다.

- Executor는 각 객체의 스레드 실행


3. 장점

- 멀티 코어 환경에서 두배의 가까운 성능을 보인다. 

- 비동기 문제를 해결 할 수 있다.


블로그 이미지

리딩리드

,
donaricano-btn

Thread에서 데이터 반환(폴링, 콜백) - Receive data by using thread polling, callback


1. thread의 데이터 반환

- run(), start() 는 어떤 값도 반환하지 않는다. 

- 특정한 방법이 필요하다


2. 일반 적인 데이터 반환

1) ThreadTest.java

- getResult() 를 이용하여 파일 쓰기가 끝나면 파일 이름을 반환한다.

2) ThreadInterface.java

- getResult() 를 호출하여 확인한다.

3) 문제

- 그러나 콘솔에는 null 값이 출력되거나 운 좋다면 파일 명이 나올 수 있다.

- 스레드의 처리 속도와 main() 의 속도가 불일치(경쟁조건) 하다.


3.  폴링(polling)을 이용한 경쟁조건 해결

1) 폴링(polling) 이란?

-  동기화를 목적으로 상태를 주기적으로 검사하여 일정 조건이 만족하면 처리하는 방법

2) 위의 문제 해결

- 반복적으로 null 을 체크하여 아니라면 출력한다.

3) 문제

- 체크하기 위하여 너무 많은 일을 한다.

- 메인 스레드가 작업종료 상태를 계속 확인해야 하기 때문에 다른 스레드가 일할 시간 없다(성능저하)


4. 콜백(callback) 으로 문제 해결

1) 콜백(callback) 이란?

- 단일 스레드의 작업이 끝났을 때 자신을 생성한 클래스를 호출하여  메인 스레드에게 결과를 알려준다.

- 폴링의 무한 루프로 결과값을 체크하는 문제 해결

1) ThreadTest.java

- 정적 메소드를 호출하여 결과값을 전달한다.

2) ThreadInterface.java

- 반환 값을 받기위한 정적메소드 

3) 개선

- 정적메소드를 호출하는 것보다 인스턴스를 생성하여 반환값을 받는 것이 더 좋다.

4) 문제

- 스레드의 순서가 없다. 먼저 종료되는 스레드의 결과를 먼저 받는다.

- 순서가 필요한 결과 값이라면 다른 방법이 필요하다.(Future, callable, Executor)




블로그 이미지

리딩리드

,
donaricano-btn

Thread 만들기 -  To create Threads


1. Thread 생성

1)  Thread클래스를 서브 클래싱해서 run()를 오버라이드 하는 방법

2) Runnable 인터페이스 구현하여 Runnable 객체를 Thread 생성자로 전달하는 방법


2. Thread의 run()

- 스레드의 시작과 끝이다.

- 단일 스레드는 main()가 반환될 때 종료되고 멀티 스레드는 run()메소드가 반환될 때 종료된다.


3. Thread클래스 서브 클래싱 하는법

- FileOutputStream 을 이용하여 여러 파일을 생성하는 스레드

- main() 에서 파일 명의 갯수 만큼 thread를 생성한다.

- 생성자를 이용하여 스레드에 정보를 전달 했다.

1) 서브 클래싱 주의

- Thread의 서브 클래스를 만들었다면, run() 이 외에는 아무것도 오버라이드 해선 안된다.

- 다른 메소드(start(), interrupt()...)  특별한 목적이나 가상머신과의 통신에 사용된다.


4. Runnable 인터페이스 구현

- 서브 클래싱과 비슷하지만 객체를 전달받아 thread를 생성하는 방법만 다르다

블로그 이미지

리딩리드

,