iOS 면접문제 정리

6415 단어
최근에 일자리를 찾고 있습니다. 몇 가지 비교적 기초적인 면접 문제를 정리했습니다. 대답은 회고만 할 수 있고 너무 깊이 들어가지도 않고 정확하지도 않습니다. 평소에 목적성 있게 깊이 이해해야 합니다.
1. 깊이 카피와 얕은 카피 대답: 깊이 카피는 새로 카피한 메모리를 대상에게 사용하고copy가 성명한 것은 깊이 카피이다.얕은 복사는 새로운 대상을 만드는 것입니다. 두 대상이 같은 메모리 주소를 가리키고,ratain이 설명하는 것은 얕은 복사입니다.oc에서 단지 한 가지 상황만 얕은 복사입니다. 즉, 변할 수 없는 대상의copy입니다. 다른 것은 모두 깊은 복사입니다. (변할 수 없는 대상의mutableCopy, 변할 수 있는 대상의copy와mutableCopy 포함)
2.retain,strong,assign,weak,copy,nonatomic,tomic는 각각 무엇을 하는가에 대한 대답:tomic는 속성을 원자 속성으로 성명하고 라인이 안전하며 속성이 쓰는 과정에서 다른 라인에 의해 읽혀져 데이터 오류가 발생하는 것을 방지하기 위해 일반적으로 파일을 읽는 데 사용되며 핸드폰에서 거의 사용되지 않는다(데스크톱에서 사용), 사용을 피해야 한다.밑바닥의 실현은 자전거 자물쇠(대응하는 것은 동기화 자물쇠이고 상호 배제 자물쇠라고도 부른다. 이것은 라인 동기화 지식이다)의 성능이 비교적 낮기 때문에 다른 방식으로 대체하는 것이 가장 좋다. 예를 들어 코드 논리를 바꾸는 방식을 통해 속성은 기본적으로atomic이다.nonatomic는 비원자 속성을 성명하는 것으로 라인이 안전하지 않습니다.assign은 기본 데이터 형식 (NSInteger, CGFloat) 과 C 데이터 형식 (int, float) 을 설명하는 데 사용되는 기본값입니다.retain은 개체를 선언하는 데 사용됩니다.copy는 NSCopying 프로토콜이 실행된 객체 유형에만 유효하며 선언 객체로도 사용됩니다.strong은 강력한 인용 속성을 설명하는 데 사용되며,retain과copy에 대응합니다.weak는 약한 인용 속성을 설명하고 자동nil화할 수 있습니다.unsafe_retained도 약한 인용 속성을 설명하지만, 자동으로 nil화되지 않습니다. 즉, 메모리가 방출되면 이 바늘은 야생 바늘입니다.
3. objective-c의 메모리 관리 원리oc는 모든 메모리에 인용 계수를 설정한다. 메모리가 a대상에게 할당되었을 때 인용 계수는 1을 더하고 메모리가 b대상에게 할당되었을 때 인용 계수는 1을 더한다. 이때 인용 계수는 2이다. a가 이 메모리를 더 이상 사용하지 않을 때 인용 계수는 1을 줄이고 b가 이 메모리를 더 이상 사용하지 않을 때 인용 계수는 1을 더 줄여 0이 되어야 한다. 그러나 이때 시스템은 시스템 비용을 줄이기 위해마이너스 1은 수행되지 않으며 메모리는 제거됩니다.
4. UIView, UIWindow와 CALayer의 연계와 차이점: UIView는 직사각형 영역의 내용을 렌더링하고 직사각형 영역에 애니메이션과 상응하는 터치 이벤트를 추가하며 여러 개의 하위 보기를 레이아웃하고 관리한다.UIWindow는 특수한 UIView이며, 프로그램에는 일반적으로 하나의 UIWindow만 있지만, 수동으로 여러 개를 만들 수 있다.UIWindow는 주로 다음과 같은 세 가지 역할을 합니다.용기로서 프로그램이 표시할 모든 보기를 포함한다.2. 터치 메시지를 다른 UIView 또는 다른 객체에 전달합니다.3. UIViewController와 협동하여 장치의 방향 회전 지원을 완성한다.CALayer는 이벤트 응답을 처리하지 않고 UIView와 서로 의존하며 UIView에 의존하여 내용을 표시하고 UIView는 CALayer에 의존하여 내용을 제공한다.
  • @implementation Son : Father
  • (id)init { if (self = [super init]) { NSLog(@"%@“, NSStringFromClass([self class])); NSLog(@"%@“, NSStringFromClass([super class])); NSLog(@"%@“, NSStringFromClass(self.superclass)); } return self; } @end//인쇄 결과는 Son Son Father 입니다. 왜일까요?대답:self와 슈퍼의 메시지 주체는 여전히self이기 때문이다.즉,self와 슈퍼가 가리키는 것은 같은 대상이다. 단지 찾기 방법의 위치가 차이가 있을 뿐이다. 하나는 본류에서, 하나는 본류에서 초류이다.일반적인 경우class 방법은 루트 NSObject에서만 정의되며 하위 클래스에서 클래스를 다시 쓰는 방법은 극히 드물기 때문에 [self calss]와 [super class]는 루트 클래스에서 방법을 찾아 실행합니다. 다시 쓰는 것은 다를 수 있습니다


  • 6. #import, #include와 @class의 관계와 차이점: 일반적으로 하나의 클래스를 인용하는 방법은 두 가지가 있는데, 하나는 #import이고, 다른 하나는 @class이다. 두 가지 차이점은 #import는 인용된 클래스의 모든 정보를 포함하고, 인용된 클래스의 속성과 방법을 포함하며, @class는 컴파일러에게 하나의 클래스만 설명하고, 클래스에 어떤 정보가 있는지 알 필요가 없다는 것이다.

    import은 파일마다 한 번만 인용되는 것으로 확인되고 #include는 여러 번 인용되어 교차 컴파일을 일으키기 쉽습니다.


    7. 손으로 쓴 Block과 거꾸로 쓴 Block의 대답:
    typedef void(^selectRowAtIndex)(NSInteger index);
    @property (nonatomic, copy) selectRowAtIndex handle;
    
    [UIView transitionWithView:self.view
                                 duration:0.2
                                  options:UIViewAnimationOptionTransitionFlipFromLeft
                             animations:^{ 
                                           [[blueViewController view] removeFromSuperview];
                                           [[self view] insertSubview:yellowViewController.view atIndex:0];
                                          }
                             completion:nil];
    typedef void(^animations)(void);
    typedef void(^completion)(BOOL finished);
    

    8. 카테고리(category)와 계승의 차이점: 카테고리는 하나의 기능 완비 클래스에 대한 보충이다. 예를 들어 Animal 클래스,run과 eat 방법이 있고 클래스에 bark 방법을 추가하려면 카테고리를 사용할 수 있다.그러나 여러 클래스가 같은 실례 변수와 방법을 가지고 있을 때 상속을 고려한다. 즉, 자류는 부류와 같은 특성을 계승할 수 있다. 예를 들어 애니멀류는 나이와 체중의 두 가지 속성을 가지고 있고 Dog도 나이와 체중의 두 가지 속성을 가진다. Dog는 애니멀의 두 가지 속성을 계승할 수 있다. 즉, 상속이다.공통점은 모두 클래스를 확장시켰다는 것이다.차이점: 1.클래스는 방법의 확장으로 구성원 변수를 추가할 수 없습니다. 계승은 부류의 구성원 변수를 바탕으로 새로운 구성원 변수를 추가할 수 있습니다.2. 클래스는 새로운 방법만 추가할 수 있고 원래의 방법을 수정하고 삭제할 수 없습니다. 계승은 방법을 추가, 수정하고 삭제할 수 있습니다.3. 유형은 기존의 방법에 대한 중재를 제창하지 않으며 계승은 슈퍼를 사용하여 원래의 방법에 대해 중재를 할 수 있다.4. 클래스는 상속될 수 있습니다. 만약에 부류에 클래스가 정의되어 있다면 부류에서도 이 클래스를 상속할 수 있습니다.
    9.__Block 및weak의 차이점 대답:Block 대상은 Block에서 수정하고 다시 부여할 수 있습니다.block은 대상과 기본 데이터 형식을 수식할 수 있지만weak은 객체만 손질할 수 있습니다.weak 대상은 Block에서 다시 값을 부여할 수 없습니다.
    10. 다중 스레드 대답: 다중 스레드의 실현 방식은 Pthreads 크로스 플랫폼을 포함하고 사용의 난이도가 높으며 거의 사용하지 않는다.NSThread 는 스레드 객체를 직접 조작할 수 있는 개체 중심의 제품입니다.생명주기는 스스로 수동으로 관리해야 하는데 가장 자주 사용하는 것은 일시 정지 기능-(void)sleepForTimeInterval:(NSTimeInterval)time일 수 있다.GCD는 C 언어를 기반으로 NSThread를 대체하고 디바이스 멀티코어를 활용하며 일반적으로 스레드의 라이프 사이클을 자동으로 관리합니다.GCD는 작업과 대기열을 바탕으로 하는 것으로 대기열은 FIFO(선진 선출) 원칙에 따라 대기열 분위기가 병행 대기열과 직렬 대기열을 가진다.NSOperation & NSOperationQueue는 GCD에 대한 봉인은 GCD보다 대상을 대상으로 하고 GCD보다 성능이 조금 떨어지며 자주 사용된다.NSOperation과 NSOperationQueue는 각각 GCD의 작업과 대기열의 개념에 대응한다.
    11.isKind OfClass와 isMember OfClass의 차이점: isKind OfClass는 한 대상이 한 종류의 실례인지 아닌지, 또는 이 종류의 조상류의 실례인지 확인할 수 있지만 isMember OfClass는 전자만 판단할 수 있고 후자를 판단할 수 없다.
    12. UCP와 TCP의 차이점: TCP(전송 제어 프로토콜)는 연결을 위한 신뢰할 수 있는 바이트 흐름 서비스를 제공한다.고객과 서버가 서로 데이터를 교환하기 전에 먼저 쌍방 간에 TCP 연결을 만들어야 데이터를 전송할 수 있다.TCP는 시간 초과 재발급, 중복 데이터 폐기, 데이터 제어 등의 기능을 제공하여 한쪽에서 다른 한쪽으로 전달할 수 있도록 보증한다.UDP(사용자 데이터 프로토콜)는 데이터를 위한 간단한 운송층 프로토콜이다.UDP는 신뢰성을 제공하지 않습니다. 프로그램이 IP층에 전송된 데이터 보고서만 보낼 뿐 목적지에 도달할 수 있도록 보장할 수 없습니다.UDP는 데이터를 전송하기 때문에 고객과 서버 사이에 연결을 맺지 않고 시간 초과 재발신 메커니즘이 없기 때문에 전송 속도가 매우 빠르다.
    13. delegate, block과 NSNotification의 차이점: NSNotification이 메시지를 보낸 후 여러 개의 메시지 수용자가 있을 수 있고 delegate는 효율이 비교적 높으며 delegate가 메시지를 보낸 후 특정한 대상만 정보를 얻을 수 있다.block은delegate의 기능을 대체할 수 있고 비교적 간결하게 실현될 수 있다.delegate는 모든 이벤트에 대해 판단과 식별을 해야 하고 Block은 이벤트를 만들 때 구분할 수 있다.
    14. KVO와 KVC의 차이점: KVC는 NSKeyValueCoding, 비공식적인Protocol을 가리키며 간접적으로 대상을 방문하는 메커니즘을 제공한다.Setter, Getter를 호출하는 대신 액세스할 수 있습니다.KVO는 KVC를 기반으로 하는 핵심 기술 중 하나입니다. -(id)valueForKey:(NSString *)key; - (void)setValue:(id)value forKey:(NSString *)key; KVO는 KeyValue Observe의 약자이고, 중국어는 키 값 관찰이다.이것은 전형적인 관찰자 모델로 관찰자가 키 값이 바뀔 때 알림을 받는다.
    addObserver:forKeyPath:options:context:;
    observeValueForKeyPath:ofObject:change:context:
    

    KVO는 대상이 소각될 때 관찰자를 제거해야 하며, 그렇지 않으면 붕괴될 수 있으니 주의해야 한다.
    removeObserver:forKeyPath:context:
    

    KVO는 동시 실행이므로 시간을 소모하는 방법을 실행할 수 없습니다. KVO는 자원 강탈이 발생할 수 있습니다.
    15.GCD 응답:
    dispatch_get_global_queue  
    dispatch_get_main_queue  
    dispatch_once_t  
    dispatch_time_t  
    dispatch_group_async  
    dispatch_group_notify  
    

    사용자 정의 대기열도 있습니다.

    좋은 웹페이지 즐겨찾기