iOS 면접문제 3

3650 단어 iOS 면접
1. 응용 프로그램의 시작 순서를 설명합니다.
1) 프로그램 입구main 함수에서 UIApplication 인스턴스와 UIApplication 프록시 인스턴스를 만듭니다.
2) UIAPplication 프록시 인스턴스에서 시작 방법을 재작성하고 루트 ViewController를 설정합니다.
3) 루트 ViewController에 컨트롤을 추가하여 애플리케이션 인터페이스를 구성합니다.
2. 왜 많은 내장 클래스, 예를 들어 UItable ViewControl의delegate 속성은retain이 아닌assign입니까?예를 들어 설명해 주세요.
반복 참조 방지
여기delegate 우리는 그delegate 방법을 실현한 대상을 얻고 이 대상의 바늘을 얻으면 된다. 우리는 그것을 바꾸거나 다른 조작을 원하지 않기 때문에 assign으로 바늘을 얻으면 된다.
리턴을 사용하면 계수기에 1을 더한다.우리는 다른 곳에서delegate라는 대상을 방출하기를 기대하고, 예를 들어 그것이 방출되었는지, 조작되었는지 판단할 수 있다.하지만 실제로는 리턴 카운트가 1로 풀려나지 않았고,
양자는 서로 가지고 있다.RC는 영원히 0이 되지 않는다.dealloc는 실행되지 않습니다. 둘 다 풀리지 않습니다.
(한 대상이 자신의delegate의 생명주기를 관리할 필요가 없거나 그 대상을 가질 필요가 없기 때문에 우리는 그 대상의 바늘만 알면 된다. 바늘로 대상을 찾아 호출하는 방법)
3. UItableView를 사용할 때 반드시 수행해야 하는 몇 가지 방법은?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
4. 편리한 구조기를 쓴다.
- (id)initWithName(NSString *)name age(int)age sex(NSString *)sex
{
    self = [super init];
    
    if (self){
        _name = name;
        _age = age;
        _sex = sex;
    }
    return self;
}

+ (id)initWithName(NSString *)name age(int)age sex(NSString *)sex
{
    Person *p = [[Person alloc]initWithName:name age:age sex:sex];
    return [p autorelease];
}

5. UIImage에서 그림을 초기화하는 방법은 몇 가지가 있습니까?각자의 장단점을 약술하다
imageNamed: 시스템은 시스템 캐시에 이 이름의 Image가 있는지 확인하고 있으면 바로 되돌려주고 없으면 캐시에 이미지를 불러온 다음 되돌려줍니다.
initWithContentsOffile: 시스템은 시스템 캐시를 검사하지 않고 파일 시스템에서 직접 불러오고 돌아옵니다.
imageWithCGImage:scale:orientationscale=1일 때 그림이 원시 크기이고orientation은 그림을 그리는 방향을 정합니다.
imageWithData;
6. 개인의retainCount 값을 대답하고 왜
Person * per = [[Person alloc] init];
self.person = per;
RC= 2;
per.retainCount = 1 ,
set 메서드 호출retain
setter 방법 인용 계수 다시 +1
7.이 코드에 무슨 문제가 있습니까?
@implementation Person
- (void)setAge:(int)newAge {
    self.age = newAge;
}
@end
self.age는 왼쪽에서도 setter 방법에 해당하며, 이로 인해 사순환을 초래한다
8.이 코드에 무슨 문제가 있으면 어떻게 수정합니까
for (int i = 0; i < someLargeNumber; i++) {
        NSString *string = @"Abc";
        string = [string lowercaseString];
        string = [string stringByAppendingString:@"xyz"];
        NSLog(@"%@", string);
    }
변경: 순환에 자동 방출 탱크 @autoreleasepool {}를 추가합니다.
for (int i = 0; i < someLargeNumber; i++) {
    @autoreleasePool{NSString *string = @"Abc";
        string = [string lowercaseString];
        string = [string stringByAppendingString:@"xyz"];
        NSLog(@"%@", string);
    }
}
메모리 유출.방법이 자체로 가지고 있는 자동 방출탱크는 방출할 겨를이 없다.
for 순환에 메모리 탱크를 추가하여 하나를 방출합니다
9. 문자열 캡처 "20 |http://www.baidu.com보통, | 문자의 앞뒤 데이터를 각각 출력합니다.
 
NSString *str = @"20|http://www.baidu.com";
NSArray *arr=[str componentsSeparatedByString:@"|"];
NSLog(@"%@%@",[arr objectAtIndex:0], [arr objectAtIndex:1]);
10.obj-c로 거품 정렬 쓰기
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"25",@"12",@"15",@"8",@"10", nil];
for (int i = 0; i < array.count - 1; i++) {
    int a = [array[i] intValue];
    for (int j = i + 1; j < array.count; j++) {
        int b = [array[j] intValue];
        if (a < b) {
            [array exchangeObjectAtIndex:i withObjectAtIndex:j];
        }
    }
}
for (int i = 0; i < array.count; i++) {
    NSLog(@"%@",array[i]);
}

좋은 웹페이지 즐겨찾기