IOS 면접 요약
2364 단어 IOS 개발
오늘 ios 개발을 만났습니다. 면접관이 자세하게 물었습니다. 평소에 눈치채지 못했던 것들이 있어서 여러분께 공유하고 싶어요. 나중에 직접 보기도 편하고 마지막으로 여러분들이 만족스러운 직장을 찾을 수 있기를 바랍니다. 잘못된 점이 있으면 지적해 주시기 바랍니다.
1. 다음 프로그램은 무엇을 출력하는데, 왜?
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
}
2016-06-03 13:00:16.878 test[10966:8733088] 1
주 스레드에서 동기화 방법을 실행하고 임무를 주 스레드 대기열에 놓는다. 주 스레드 대기열은 직렬 대기열이고 임무는 하나하나 실행된다. 그래서 이 동기화 방법은 주 임무가 완성된 후에만 이 동기화 방법의 임무를 수행할 수 있고 주 스레드 대기열의 주 임무는 동기화 방법을 바꾸어 실행한 후에야 계속 실행할 수 있기 때문에 순환 대기를 초래한다.프로그램이 멈추다.
총괄: 메인 스레드 대기열은 바로 메인 스레드열은 특수한 직렬 대기열이다. 이 대기열에 나타난 임무는 동기화 방법이든 비동기화 방법이든 따로 대기열을 열지 않고 메인 스레드의 임무는 메인 스레드에서만 집행된다.
2.copy로 식별된 NSString 속성은 딥 카피입니까 아니면 얕은 카피입니까?
LXPerson *person = [[LXPerson alloc]init];
NSString *name = [NSString stringWithFormat:@"add"];
person.name = name;
NSLog(@"%@--%p", name, name);
NSLog(@"%@--%p", person.name, person.name);
2016-06-04 11:04:51.428 test[1331:240405] add–0xa000000006464613 2016-06-04 11:04:51.428 test[1331:240405] add–0xa000000006464613
얕은 카피, 여기서 왜 코피를 얕은 카피를 사용합니까? NSString 자체가 변할 수 없기 때문에 얕은 카피든 깊은 카피든 똑같습니다. 그래서 애플은 얕은 카피를 사용합니다. 이렇게 하면 메모리의 비용을 절약할 수 있지만 코피의 대상이 변할 수 있다면 깊은 카피입니다. 예를 들어 NSMutable String입니다.
총괄:copy가 변할 수 없는 대상은 메모리만 복제하고 얕은 복사에 속한다.copy가 변할 수 있는 대상은 전체 대상의 내용을 복사하고 깊은 복사에 속한다.
3. copy로 표시된 NSMutable Array 속성은 변경될 수 있습니까 아니면 변경될 수 없습니까?
copy의 속성은 모두 변할 수 없습니다. 만약 copy 다음에 변할 수 있다면,mutableCopy 속성을 사용하십시오.
4. 객체가 비어 있으면 메소드 메시지를 보내면 오류가 발생합니까?
잘못 보고하지 않을 겁니다.
후속은 계속 보충할게요...