【问题标题】:How to send a message from an instance method to a object of another class如何将消息从实例方法发送到另一个类的对象
【发布时间】:2013-02-02 05:36:12
【问题描述】:

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

问题来了:

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

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

这里有一些代码:

纸.h

@interface Paper : NSObject

@property (nonatomic) int numbers;

@end

纸.m

#import "Paper.h"

@implementation Paper

@synthesize numbers;

@end

和 Eraser.h

@interface Eraser : NSObject

-(void)eraseMethod;

@end

橡皮擦.m

#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,因为我在某处读过,但这对任何方式都没有帮助......我希望这是一个明确的问题

【问题讨论】:

  • 不是很清楚你想在这里实现什么。您向纸质对象发送eraserMethod 消息,但显然您的对象没有响应该消息(甚至橡皮擦对象也没有响应该确切消息)。如果您正在寻找一种将消息转发到纸的所谓内部橡皮擦对象的方法,那么我必须说,在这种特定情况下(橡皮擦/纸),这是一个非常糟糕的设计。
  • 如果Paper不是从Eraser派生的,你怎么能通过Paper类的实例调用Eraser类的–eraseMethod方法,即一个完全独立的吗?你有OOP的基础知识吗?
  • @holex 我完全知道这不是它的工作方式,你读过这个问题吗?我在问如何正确地做到这一点。
  • @Loudequal,是的,我读过它,看起来你想在这里实现什么有点神秘......也许解决方案是创建一个 delegate 类,但目标不太清楚勇敢地说它是你的解决方案。

标签: objective-c class inheritance methods


【解决方案1】:

Ivars 只是存储槽,当没有指定访问条件时,它们是类私有的。您可以使用属性来从另一个类访问。 more info here

为了达到你所说的,使方法成为类方法 see here

#import "Eraser.h"
@implementation Eraser

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

@end

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

【讨论】:

  • “它们是班级私有的” 不正确。实例变量可以具有访问修饰符@public@protected@private。接口中声明的实例变量默认为@protected,实现中声明的实例变量默认为@private。但是用户可以将访问修饰符显式设置为其他内容。
  • 已解决,我确实使用了类方法,谢谢(感谢您提供链接)
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
相关资源
最近更新 更多