自定义类的 getter 和 setter
Posted
技术标签:
【中文标题】自定义类的 getter 和 setter【英文标题】:getters and setters for custom classes 【发布时间】:2010-09-19 21:48:35 【问题描述】:如果您合成一个自定义类,是否会为其创建 getter 和 setter?
这是我创建的自定义类。
// MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject <NSCoding>
NSString *string1;
NSString *string2;
@property (nonatomic, retain) NSString *string1;
@property (nonatomic, retain) NSString *string2;
@end
在这里,我将该类的一个对象声明为属性
// DetailViewController.h
#import <UIKit/UIKit.h>
#import "MyClass.h"
@interface DetailViewController : UIViewController
MyClass *myObject;
@property(nonatomic, retain) MyClass *myObject;
@end
我在这里合成对象。
#import "DetailViewController.h"
#import "MyClass.h"
@implementation DetailViewController
@synthesize myObject;
那么它有 getter 和 setter 吗?
当我尝试在 RootViewController.m 中运行此代码时
DetailViewController.myObject = [theArray objectAtIndex:indexPath.row];
我收到一条错误消息,提示“正在访问未知的 'setMyObject:' 类方法。无法设置对象 - 只读属性或未找到设置器。”
【问题讨论】:
【参考方案1】:仅当您将所需的实例变量声明为属性时,synthesize propname;
才会创建 getter 和 setter。现在,getter 和 setter 中的代码类型取决于您定义的属性属性(nonatomic
/atomic
、assign
、retain
、copy
)
编辑 OP 修改后的问题:是的,一个 getter/setter 将为DetailViewController
类的myObject
实例变量创建
DetailViewController.myObject = [theArray objectAtIndex:indexPath.row];
您正试图设置一个未定义的类变量。 DetailViewController
的类型是 Class
,而不是 DetailViewController
。在DetailViewController
的实例上执行相同的操作,您应该已经准备就绪。
【讨论】:
以上是关于自定义类的 getter 和 setter的主要内容,如果未能解决你的问题,请参考以下文章
Intellij IDEA 自定义 getter and setter
如何在android中为自定义视图创建setter和getter