iOS NSString 如何写get方法

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

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

时间: 2024-08-10 19:16:01

iOS NSString 如何写get方法的相关文章

iOS NSString追加字符串的方法

第一种: NSArray *array = [NSArray arrayWithObjects:@"Hello",@" ",@"world", @"!", nil]; NSString *printStr = @""; for(int i = 0; i < [array count]; i++){ printStr = [printStr stringByAppendingFormat:@"

iOS 高效开发-----实现description 方法 (续)

在 “iOS 高效开发-----实现description 方法”这篇文章的最后,我留下了一个问题,就是,如果要给每个自定义的类覆写description方法和debugDescription方法 ,那将是一件非常庞大的工作量 ,因为自定义的类很多 ,而且每个自定义的类中的属性都会随着需求的修改出现变化 ,那么就又得修改这两个方法,那就变得无穷无尽了,永无宁日了,要么不用,要么就要找到更好得方法去用. 接下来,我们会用到动态运行时runtime. 我们先假设我们要处理的类中的属性都是OC的对象,

iOS中数组遍历的方法及比较

数组遍历是编码中很常见的一种需求,我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点. 因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的. 本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了. NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"]; 第一种方法

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

IOS开发之——四种方法解析Jason数据(转)

本文将介绍TouchJson. SBJson .JSONKit 和 iOS5所支持的原生的json方法,解析国家气象局API,TouchJson和SBJson需要下载他们的库 TouchJson包下载: http://download.csdn.net/detail/enuola/4523169 SBJson 包下载: http://download.csdn.net/detail/enuola/4523177 JSONKit包下载:http://download.csdn.net/detail

iOS NSString的学习熟悉

对于字符串频繁的切割,合并,插入等操作,优先使用NSMutableString类. 这里讨论的是NSString.然后就是贴代码: 1 -(void)stringDemo{ 2 NSLog(@"____________________________"); 3 4 NSString *string = [[NSString alloc] initWithString:@"Hi,woods!"]; 5 NSLog(@"%@", string); 6

IOS开发中重写init方法使用需谨慎

IOS开发中重写init方法使用需谨慎 今天在写一个小软件的时候出现一点问题,这个软件的功能是搜索全国学校,首页就是搜索输入框,在框中输入完要查询的学校所在省份,点击buttom后就会跳转到对应的视图控制器中,然后把搜索结果呈现在一个TableView上,但是我在调试时,每次输入完然后点击搜索按钮时,弹出结果列表总是空的,我需要返回到首页再点击一次搜索才会出现结果,而且我在首页更改搜索关键字之后,点击搜索,结果还是上次的搜索结果,必须返回点击一次才会出现这次的搜索结果. 经过大神指点,原来这个问

NSString 常用的一些方法

//将NSData转化为NSString NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; //将NSString 转化为NSData (NSString.h) - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding; //载一个字符串中删除一个字符或字符串 [_display deleteCharactersIn

ios NSString字符串如何转为NSNumber(已解决)

今天同事问我 NSString字符串如何转为NSNumber,思考了一下解决了 思路:先将字符串转为NSInteger类型,再通过NSNumber的创建方法@(数字)即可实现 NSString * str = @"890909"; // 字符串转为NSInteger类型 NSInteger num = [str integerValue]; NSLog(@"%li",num); // 字符串转为NSNumber对象类型 NSNumber * nums = @(num