Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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_Class_Inheritance_Methods - Fatal编程技术网

Objective c 如何将消息从实例方法发送到另一个类的对象

Objective c 如何将消息从实例方法发送到另一个类的对象,objective-c,class,inheritance,methods,Objective C,Class,Inheritance,Methods,我试图寻找这个(简单的)问题的答案,但似乎没有什么效果,甚至书都不是那么具体(至少是我读过的书),或者可能我只是错过了一些重要的东西,因为我有点困惑,我决定在这里尝试 问题是: 假设我有一个包含一个或多个实例变量的ClassA。 然后我有一个ClassB,它包含一个修改ClassA变量的实例方法(这可能是正确的吗?)这些类没有相互继承,都是从NSObject继承的 然后我想通过UIViewController上的ClassA对象调用ClassB的方法。我相信我需要一个类之间的引用,但我不确定如何

我试图寻找这个(简单的)问题的答案,但似乎没有什么效果,甚至书都不是那么具体(至少是我读过的书),或者可能我只是错过了一些重要的东西,因为我有点困惑,我决定在这里尝试

问题是:

假设我有一个包含一个或多个实例变量的ClassA。 然后我有一个ClassB,它包含一个修改ClassA变量的实例方法(这可能是正确的吗?)这些类没有相互继承,都是从NSObject继承的

然后我想通过UIViewController上的ClassA对象调用ClassB的方法。我相信我需要一个类之间的引用,但我不确定如何设置它们以使它们工作。想象一下,我有一篇论文,其中包含书写或数字(在本例中为数字)和一个类erase来修改它的变量并擦除数字(例如通过减法)

下面是一些代码:

@interface Paper : NSObject

@property (nonatomic) int numbers;

@end

#import "Paper.h"

@implementation Paper

@synthesize numbers;

@end
还有橡皮擦

@interface Eraser : NSObject

-(void)eraseMethod;

@end
橡皮擦

#import "Eraser.h"

@implementation Eraser

-(void)eraseMethod {
//here I want to make a subtraction of the ivar declared in Paper
}

@end
最后我试着像这样在UIViewController上调用它

[paperObject eraseMethod];

我试着在每个文件中声明@class,正如我在某个地方读到的那样,但这毫无帮助。。。我希望这一点很清楚,因为问题

IVAR只是存储插槽,在不指定访问条件的情况下,它们对类是私有的。您可以使用属性从另一个类进行访问

为了实现您所说的,请将该方法设置为类方法


因此,您可以在VC中实现该方法。

不太清楚您在这里想要实现什么。您向纸对象发送了一条
eraserMethod
消息,但显然您的对象没有响应该消息(甚至橡皮擦对象也没有响应该消息)。如果你想找到一种方法将消息转发到纸的内部橡皮擦对象,那么我必须说,在这种特定情况下(橡皮擦/纸),这是一种非常糟糕的设计。如果
不是从
橡皮擦
派生出来的,您希望如何通过完全独立于它的
Paper
类的实例调用
橡皮擦
类的
–橡皮擦方法
方法?你有
OOP
的基本知识吗?@holex我完全知道这不是它的工作方式,你读过问题了吗?我在问如何正确地完成它。@Loudequal,是的,我已经读过了,它看起来有点神秘,你到底想在这里实现什么。。。也许解决方案是创建一个
委托
类,但目标并不十分明确,勇敢地说这是适合你的解决方案。“而且它们是该类的私有”不是真的。实例变量可以具有访问修饰符
@public
@protected
@private
。接口中声明的实例变量的默认值为
@protected
,而实现中声明的实例变量的默认值为
@private
。但是用户可以显式地将访问修饰符设置为其他内容。解决了,我使用了类方法,谢谢(甚至感谢您提供的链接)
#import "Eraser.h"
@implementation Eraser

+(void)eraseMethod {
//here I want to make a subtraction of the ivar declared in Paper
}

@end