iOS 프로토콜 - CS193P 과정 노트(1)
3809 단어 ios
'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 방법을 에이전트하고 에이전트인 id
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 클래스입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.