SORU
10 Mayıs 2009, Pazar


Nasıl Objective-C protokolleri özellikleri içerir işlemek için?

Objective-C protokolleri aşağıdaki şekilde kullanılır: kullanımı gördüm

@protocol MyProtocol <NSObject>

@required

@property (readonly) NSString *title;

@optional

- (void) someMethod;

@end

Bu biçimi alt uzanan beton bir sınıf yazmak yerine kullanıldığını gördüm. Soru, Eğer bu protokol için uygundur, özellikler sentezlemek gerekiyor kendini. Eğer bir üst uzanan ediyorsanız, cevap vermek zorunda değilsiniz açıkçası hayır. Ama nasıl bir Protokole uymasını gerektiren özellikleri ile ilgilidir?

Benim anladığım kadarıyla, sen hala bu özellikleri gerektiren bir Protokole uygun bir nesne üstbilgi dosyasında örnek değişkenleri bildirmek gerekir. Bu durumda, sadece temel bir ilke olduğunu kabul edebilir miyiz? Açıkça gerekli bir yöntem için durum böyle değil. Derleyici bir protokol listeleri gerekli bir yöntem hariç bileğine bir tokat gibi vuracak. Özellikleri rağmen arkasındaki hikaye nedir?

Burada bir hata (Not: eldeki sorunun üzerine yansıtmak değil kod) kesilmiş ettim derleme oluşturur bir örnek:

MyProtocol.h

@protocol MyProtocol <NSObject>

@required
@property (nonatomic, retain) id anObject;

@optional

TestProtocolsViewController.h

- (void)iDoCoolStuff;

@end

#import <MyProtocol.h>

@interface TestProtocolsViewController : UIViewController <MyProtocol> {

}

@end

TestProtocolsViewController.m

#import "TestProtocolsViewController.h"

@implementation TestProtocolsViewController
@synthesize anObject; // anObject doesn't exist, even though we conform to MyProtocol.

- (void)dealloc {
    [anObject release]; //anObject doesn't exist, even though we conform to MyProtocol.
    [super dealloc];
}

@end

CEVAP
10 Mayıs 2009, Pazar


Protokol sadece özellik anObject orada olacak bu Protokol ile sınıfı hakkında bilen herkes söylüyor. Protokoller, gerçek değil, onlar hiçbir değişken veya yöntem kendilerini - onlar sadece bir tarif dolayı kümesinin özelliklerinin doğru senin sınıf nesneleri holding referanslar için onları kullanabilir, belirli yollar.

Bu Protokole uygun olarak, her şeyi anObject çalıştığından emin olmak için yapmanız gereken, sınıf demektir.

@property ve @sentez kalbim senin için kodu oluşturmak için iki mekanizma vardır. @özellik sadece o laf özellik adı için (ve/veya ayarlayıcı) alıcı bir yöntem olacak. Bu gün @özellik de, tek başına yöntemleri ve depolama değişken sistem (@sythesize eklemek için kullanılır) tarafından yaratılmış olması yeterlidir. Ama bir şey ve değişken erişim saklamak zorunda.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Atlantic Records

    Atlantic Rec

    15 Aralık 2006
  • circuschina

    circuschina

    16 Mart 2007
  • SoundHound

    SoundHound

    8 Mart 2006