iOS 면접 총결산 2018-06

2513 단어
1. 공장화 모델의 특징: 장점
공장류는 전체 모델의 관건이다.필요한 논리적 판단을 포함하고 외부에서 정한 정보에 따라 어떤 구체적인 유형을 만들어야 하는지를 결정한다.공장류를 사용함으로써 외부에서 구체적인 제품 대상을 직접 만드는 난감한 국면에서 벗어나'소비'대상을 책임지기만 하면 된다.이러한 대상이 도대체 어떻게 창설되고 어떻게 조직되는지 상관하지 않아도 된다. 각자의 직책과 권리를 명확히 하면 전체 소프트웨어 체계 구조의 최적화에 유리하다.
결점
공장류는 모든 실례의 창설 논리를 집중시켰고 고내집 책임 분배 원칙을 위반하여 모든 창설 논리를 한 공장류에 집중시켰다.그것이 만들 수 있는 클래스는 사전에 고려했을 뿐이고, 새로운 클래스를 추가해야 한다면 공장 클래스를 바꿔야 한다.
시스템 중의 구체적인 제품류가 끊임없이 증가할 때 공장류가 서로 다른 조건에 따라 서로 다른 실례를 만들어야 하는 수요가 나타날 수 있다. 이런 조건에 대한 판단과 구체적인 제품 유형에 대한 판단이 교차되어 모듈 기능의 만연을 피하기 어렵고 시스템의 보호와 확장에 매우 불리하다.
이런 결점은 공장 방법 모델에서 어느 정도 극복되었다.
장면 작업
공장류가 창설을 책임지는 대상이 비교적 적다.
고객은 공장류에 전송되는 파라미터만 알고 대상(논리)을 어떻게 만드는지에 대해 관심이 없다.
단순 공장은 고내적 책임 분배 원칙을 위반하기 쉬우므로 보통 간단한 상황에서만 적용된다.
// , 
class Operation
{
public:
    virtual int GetResult() =0;
public:
    double m_Num1;
    double m_Num2;
};
// , 
class OperationFactry
{
public:
    OperationFactry(void);
    ~OperationFactry(void);
public:
    static Operation* CreateOperate(int n )
    {
        switch(n)
        {
        case 1:
            return new OperationAdd;
            break;
        }
    }
};
// , , 
class OperationAdd:Public Operation
{
public:
    int GetResult();
};

2. self와 슈퍼 이해
@implementation Son : Father

- (id)init

{

self = [superinit];

if(self) {

NSLog(@"%@", NSStringFromClass([self class]));

NSLog(@"%@", NSStringFromClass([superclass]));

}

returnself;

}

@end

 :

  Son


self는 클래스의 숨겨진 매개 변수입니다. 현재 호출 방법을 가리키는 클래스의 실례입니다.슈퍼는Magic Keyword로 본질은 컴파일러 표시자이며self와 같은 메시지 수용자를 가리킨다.
위의 예는 [self class]를 호출하든 [super class]를 호출하든 메시지를 받는 대상은 현재 Son≥xxx라는 대상이다.다른 것은 슈퍼는 컴파일러에게class를 호출할 때 부류를 제거하는 방법이 아니라 부류를 제거하는 방법을 알려준다.
self 호출 방법을 사용할 때 현재 클래스의 방법 목록에서부터 찾고 없으면 부모 클래스에서 다시 찾습니다.슈퍼를 사용할 때 부류의 방법 목록에서 찾습니다.그리고 부류의 이 방법을 사용한다.
[self class]를 호출할 때, 실제적으로 먼저 호출하는 것은objcmsgSend 함수, 첫 번째 매개 변수는 Son의 현재 이 실례입니다. 그리고 Son이라는 클래스에서 - (class)class 방법을 찾습니다. 없습니다. 부모 클래스Father에서 찾습니다. 없습니다. 마지막으로 NSObject 클래스에서 이 방법을 발견했습니다.-(class)class의 실현은self의 종류를 되돌려주는 것이기 때문에 상술한 출력 결과는son이다.
[super class]를 호출하면 objc 로 변환됩니다.msgSendSuper 함수첫 번째objc슈퍼 구조체, 구조체의 첫 번째 구성원은self다.두 번째 멤버는 (id)classgetSuperclass(objc getClass("Son") - 실제 함수 출력 결과는Father입니다.두 번째 단계는Father류에 가서 - (Class)class를 찾고, 없어요. 그리고 NSObject류에 가서 찾았어요.마지막 내부는 objc 사용msgSend (objc super->receiver, @selector (class) 를 호출합니다. 이 때 [self class] 호출과 같기 때문에 상기 출력 결과는 Son으로 되돌아옵니다.
3. 관찰자 모드

좋은 웹페이지 즐겨찾기