2009-02-28 17 views
1

Ben nesnel bir C yeni oyuncusum. Bir kategoride oluşturduğum bir func'i neden aradığım için uyarı alıyorum?Hedef-c kategorisinde bir func ekleme

#import <stdio.h> 
#import <objc/Object.h> 

@interface MyObj: NSObject 
{ 
@public 
    int num; 
} 

-(void) print; 
@end 

@implementation MyObj; 
-(void) print 
{ 
    printf("%d\n", self->num); 
} 
@end 

@implementation MyObj(more) 
-(void) quack 
{ 
    printf("Quack\n"); 
} 
@end 


int main (int argc, char *argv[]) 
{ 
    MyObj *obj = [[MyObj alloc] init]; 
    obj->num = 9; 
    [obj print]; 
    [obj quack]; //warning my not respond to quack 
    [obj release]; 
} 

cevap

3

Arabirimi MyObj (daha fazla) için, örneğin bildirmelisiniz.

@interface MyObj(more) 
-(void)quack; 
@end 
1

Sadece birkaç şeyi belirtmek istedim çünkü Obj-C'ye yeni olduğunuzu belirttiniz.

bir yöntemin İçinde, örnek değişkenleri ulaşmak için self-> başvurmak gerekmez, bu nedenle print yöntem olabilir:

Ayrıca
-(void) print 
{ 
    printf("%d\n", num); 
} 

normalde doğrudan dışarıda bir örnek değişkeni erişmek asla unutmayın Nesnenin yöntemlerinin (yani obj->num yapmazsınız - aslında Obj-C kodunda -> işlecini görmezsiniz). Bunun yerine, mülk için erişim sağlayıcıları belirtebilirsiniz (bunun, Objective-C 2.0 olduğunu varsayalım):

// In the interface: 
@property (assign) int num; 

// In the implementation: 
@synthesize num; 

// In main: 
obj.num = 9; 
+0

Bunu bilmek güzel. Görünüşe göre 2.0 kullanıyorum. Teşekkürler :). Bu daha güzel görünüyor –

İlgili konular