iOS NSString 属性使用 get方法时 get写法在arc下无法通过编译 可以通过如下方法来间接实现,实现方法如下:
http://www.cnblogs.com/love-lie/archive/2012/06/25/2561566.html
such as: #import <Cocoa/Cocoa.h> @interface Photo : NSObject { NSString* caption; NSString* photographer; } - (NSString*) caption; - (NSString*) photographer; @end 现在添加setter: #import <Cocoa/Cocoa.h> @interface Photo : NSObject { NSString* caption; NSString* photographer; } - (NSString*) caption; - (NSString*) photographer; - (void) setCaption: (NSString*)input; - (void) setPhotographer: (NSString*)input; @end Setter不需要返回值,所以设置为void。 6. 类实现 从getter开始创建实现: #import "Photo.h" @implementation Photo - (NSString*) caption { return caption; } - (NSString*) photographer { return photographer; } @end 这部分的代码由@implementation和类名开始,并且像接口一样有@end。所有的方法必须放在这两个声明之间。 如果之前做过编码,getter看起来应该非常熟悉,所以将精力放在setter上,这需要一些解释: - (void) setCaption: (NSString*)input { ; caption = [input retain]; } - (void) setPhotographer: (NSString*)input { [photographer autorelease]; photographer = [input retain]; } 每个setter有两个变量。第一个是已有对象的引用,第二个是新输入的对象。在垃圾回收环境中,可以直接设置新值: - (void) setCaption: (NSString*)input { caption = input; } 但是如果不能使用垃圾回收,就需要释放(release)旧对象,并保持(retain)新对象。 实际上有两种方式释放对象的引用:释放(release)和自动释放(autorelease)。标准的释放将会立即移除引用。自动释放方法将会在一小会后释放,但可以明确的是它会保留到当前函数结束(除非添加自定义的代码明示改变这个规则)。 自动释放方法在setter中更加安全一些,因为变量的新旧值会指向相同的对象。肯定不想立刻释放需要保持的对象。 现在似乎有一些混乱,但是将会按照进度有一个整体的介绍。现在无需弄清楚所有内容。
时间: 2025-01-08 20:04:30