iOS NSString 如何写get方法

本文深入探讨了Swift编程中Objective-C属性的使用方法,包括如何通过间接方法实现在ARC环境下无法直接通过get方法访问属性的问题。文章详细介绍了属性的setter实现以及在垃圾回收环境下的对象引用管理,旨在帮助开发者理解和掌握Swift中Objective-C属性的高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中更加安全一些,因为变量的新旧值会指向相同的对象。肯定不想立刻释放需要保持的对象。

现在似乎有一些混乱,但是将会按照进度有一个整体的介绍。现在无需弄清楚所有内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值