iOS 프로토콜 - CS193P 과정 노트(1)

3809 단어 ios
하나.protocal과delegate 개념을 도입하는 목적
'id' 형식의 사용으로 인해 id를 통해 진정으로 전달하거나 수신하고 싶은 데이터 형식을 얻을 수 없습니다. (id의 자성 메커니즘을 통해 실행할 때 문의할 수 있지만.)따라서 우리는 코드에서 이 id 유형의 대상이 어떤 방법을 실현하고 싶은지 설명한다. (문법적 정의,protocal이 있는지, 컴파일러가 생성한 코드는 다를 것이 없다.)
      id < Protocal > obj 
성명 대상 obj, id 형식의 대상이며, 특정한 조건을 충족시킵니다.
     id < Protocal > obj =[ [MyClass alloc ]init ]
MyClass는 Protocal의 방법을 실현하겠다고 약속합니다.
 
둘.iOS에서protocal의 응용
1 delegate 및 dataSourse
iOS의 대상은 특정한 중요한 기능과 클래스에 속하지 않는 방법을 완성하려면 이 이벤트의 조작 에이전트를 내보내고 에이전트가 완성합니다.상술한 목적을 달성하기 위해 이 대상에서 일련의 방법(protocal)을 만족시키는 속성을 성명하고 그 에이전트를 대표한다.
1.1 하위 클래스에서 클래스에 속하지 않는 방법을 구현하는 방법(This is an alternative to subclassing to provide non-generic behavior)
예:
 1  // NetWorkManager.h

 2  @protocol NetworkDelegate

 3  @required

 4  - (void)task:(NetWorkFlag)tag didSuccess:(NSDictionary *)result withInfo:(NSString *)infoString;  //    

 5  - (void)task:(NetWorkFlag)tag didFailed:(NSString *)failedReason;  //    

 6  @optional

 7  - (void)setProgress:(float)newProgress;

 8  @end

 9  @interface NetWorkManager : NSObject<ASIHTTPRequestDelegate>

10  @property (nonatomic, weak) id<NetworkDelegate> networkDelegate;

11  .....//     

상기 코드는 NetWork Manager가didSuccess와didFailed 방법을 에이전트하고 에이전트인 idnetworkDelegate가 실현한다는 것을 설명한다.그 중에서networkDelegate는 모든 종류 (id) 의 대상이 될 수 있으며 @protocol NetworkDelegate를 실현하겠다고 약속합니다.
1  //GetOrderController.h

2  @interface GetOrderViewController : TTBaseViewController <UITableViewDelegate,UITableViewDataSource,UIAlertViewDelegate,NetworkDelegate> 
1 // GetOrderController.m

2 

3 [self.networkManager setNetworkDelegate:self];

 
1.2 객체(MVC)에서 블라인드 커뮤니케이션 직접
예를 들어 View는 자신의 데이터를 가지고 있을 수 없기 때문에 다른 대상에게 끊임없이 물어보고 통신해야 한다.뷰는 특정한 유형의 대상과 연결되고 싶지 않기 때문에 이 통신 대상은 id(보이지 않음)가 가장 좋다.
GetOrder Controller에는 테이블 뷰 속성이 있습니다. 목록 정보를 보여주는 데 사용됩니다. 즉, GetOrder Controller가 데이터 Sourse 프로토콜에서 얻은 방법을 약속합니다.이 경우,tableView와 GetOrderController의 통신 (controller와view) 은 맹신 통신 (blind) 이다.커뮤니케이션 컨텐트는 여기서 count 및 dataAt 클래스입니다.
 
 
 

좋은 웹페이지 즐겨찾기