我知道这非常简单,但我正在重新教自己基础知识,并试图弄清楚这一点:-)
我有一个名为MainVC的ViewController,还有一个名为ClassVC的
在ClassVC中,我有这样的代码:
@interface ClassVC : UIViewController
{
NSString *mainLine;
}
@property (nonatomic, retain) NSString *mainLine;
@end我在实现文件中有如下内容:
@synthesize mainLine = _mainLine;
-(NSString *)_mainLine
{
_mainLine = @"This a string from a Class";
return _mainLine;
}现在我在想,如果我#将ClassVC导入到MainVC中,我也可以像这样传输该字符串:
This code is in the viewDidLoad
_mainLabel.text = _secondClass.mainLine;
NSLog(@"%@", _secondClass.mainLine);但这是不起作用的-所以我不能通过这种方式传递字符串吗?
发布于 2012-09-06 08:47:33
您的属性是mainLine,所以被覆盖的getter应该是-(NSString *)mainLine而不是-(NSString *)_mainLine。
-(NSString *)mainLine
{
_mainLine = @"This a string from a Class";
return _mainLine;
}这对我很有效。在ClassVC中:
@interface ClassVC : UIViewController
@property (nonatomic, retain) NSString *mainLine;
@end
#import "ClassVC.h"
@implementation ClassVC
-(NSString *)mainLine
{
_mainLine = @"This a string from a Class";
return _mainLine;
}在ViewController中是这样的:
#import <UIKit/UIKit.h>
@class ClassVC;
@interface ViewController : UIViewController
@property (strong,nonatomic) ClassVC *secondClass;
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end
#import "ViewController.h"
#import "ClassVC.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
ClassVC *secondClass = [[ClassVC alloc] init];
self.mainLabel.text = secondClass.mainLine;
NSLog(@"%@", secondClass.mainLine);
}发布于 2012-09-06 08:52:34
这行代码:
@synthesize mainLine = _mainLine;意味着分别创建名为mainLine和setMainLine:的getter和setter方法,这些方法包装一个名为_mainLine的实例变量。(它会为您创建实例变量,因此不需要在标题中声明的实例变量mainLine )
(=前面的名字是属性名,equals后面的名字是它包装的ivar的名字)
您已尝试覆盖getter,但使用了实例变量的名称。getter不以下划线开头,因此从返回字符串的方法中删除下划线。
因此,在您的viewDidLoad方法中,您调用的是mainLine方法,该方法只返回_mainLine实例变量。永远不会调用您的_mainLine方法
如果你只是返回一个常量字符串,那么你根本不需要这个属性和ivar。
(此外,您不应该以下划线开始方法名称或变量,因为根据约定,下划线表示它是私有的,并且Apple基本上保留了所有以下划线开头的方法名称。然而,ivars以下划线开头是很常见的)
https://stackoverflow.com/questions/12291533
复制相似问题