【问题标题】:Calling instance variables inside class methods在类方法中调用实例变量
【发布时间】:2012-11-09 03:44:47
【问题描述】:
//SecondPage.h
@property (nonatomic, copy) NSString *secondLabelText;
+(SecondPage *) newAlloc;
+(id) totalOpen;
+(void)setSecondLabelText;

//SecondPage.h
@synthesize secondLabelText;   //DOESNT WORK.
NSString* secondLabelText;   //DOES WORK. 


+(void) setSecondLabelText
{
    secondLabelText = @"TEST";
}

+(id) totalOpen
{
    [self setSecondLabelText];
    return secondLabelText;
}

我希望能够使用类方法将一个类的变量“复制”到另一个类中。在这种情况下,我使用了 [SecondPage totalOpen],但唯一的问题是我只能在类方法 setSecondLabelText 中设置 secondLabelText,如果它已经设置,我将无法调用它。有没有一种方法可以返回一个已经为类设置的值,或者另一种方法来实现我想要实现的目标。

【问题讨论】:

  • 你不能从类方法中访问实例变量。想一想 - 这没有任何意义。

标签: objective-c class


【解决方案1】:

我不清楚您要实现什么,但类方法没有您似乎相信的意义上的实例。将变量从一个实例复制到另一个实例的类方法必须将两个实例作为参数。在您的代码中,您可以访问 NSString *secondLabelText,因为您已将其声明为 global 变量。它与类的每个实例所具有的属性完全无关,除了您混淆地赋予它相同的名称。

【讨论】:

  • 我在这里想要实现的是:class1InstanceVariabe = [class2 classMethod] 所以基本上在我的情况下,第 1 类中的 firstLabelText 将等于第 2 类中的 secondLabelText
  • 你能简单谈谈为什么你认为类方法而不是普通的实例方法是正确的使用方法吗?
  • 我尝试过使用实例方法,但我无法实现我的目标(将 class2 的变量复制到 class1 中)。
  • 你需要退后一步,正确地学习面向对象编程。关键是实例封装了状态。如果您需要 object1 从 object2 中获取状态,则由您来构建您的应用程序,以便 object1 具有对 object2 的引用。正如 Tommy 所说,将所有内容推入类只会使所有内容成为全局变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2019-09-12
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多