Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 类方法也是继承的吗?_Objective C_Inheritance_Subclass_Class Method - Fatal编程技术网

Objective c 类方法也是继承的吗?

Objective c 类方法也是继承的吗?,objective-c,inheritance,subclass,class-method,Objective C,Inheritance,Subclass,Class Method,当我定义从NSObject继承的新类时: @interface Photo : NSObject { NSString* caption; NSString* photographer; } @property NSString* caption; @property NSString* photographer; @end NSObject中的所有类方法(如alloc)是否都由新类Photo继承?是的,Photo可以在子类化时使用a的任何方法/属性/ivar/etc(声明

当我定义从
NSObject
继承的新类时:

@interface Photo : NSObject
{
    NSString* caption;
    NSString* photographer;
}

@property NSString* caption;
@property NSString* photographer;

@end

NSObject
中的所有类方法(如
alloc
)是否都由新类
Photo
继承?

是的,
Photo
可以在子类化时使用a的任何方法/属性/ivar/etc(声明为
@private
的ivar除外):

更多关于
@private
->


可能需要修改您的答案:方法和属性都没有访问级别(例如,
@private
),甚至可以通过Objective-C运行时访问IVAR(确实有访问级别)。编译器指令
@private
仅适用于实例变量,而不适用于方法。此外,点语法不应用于调用除访问器方法以外的任何方法,并且
NSObject
没有任何访问器。来自Objective-C编程指南:“Objective-C还提供了一个点(.)操作符,它为调用对象的访问器方法提供了简洁方便的语法。”我不相信这能回答问题;示例中的所有方法都是实例方法,但问题是关于类方法的。也就是说,类方法确实是继承的,因为类的元类是超类元类的子类。
Photo *myPhoto;
myPhoto = [[Photo alloc] init];
// ... Do some myPhoto stuff ...
NSLog(@"Photo object: %@", myPhoto);
NSLog(@"Photo description: %@", [myPhoto description]);
NSLog(@"Photo caption: %@", [myPhoto caption]);
NSLog(@"Photo photographer: %@", [myPhoto photographer]);