大佬教程收集整理的这篇文章主要介绍了ios – 扩展属性在NSString类别中崩溃,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#import "NSString+Name.h" @interface NSString(Name) @property (nonatomic,retain) NSString *var; @end
但是当我试图访问类别类中的私有变量时,应用程序崩溃并给出错误.
@implementation NSString (Name) - (NSString*)newString{ [self setVar:@"Its a new String"]; // Crashes here NSLog(@"name = %@",self.var); return self.var; } @end
崩溃的原因
如果我能够在该变量中分配值,那么为什么它会说无法识别的选择器
@H_419_4@
来自Apple的[使用Objective C编程] [1]文档:
>类别实例方法中的Self指的是实例变量
类别实例方法(以 – 开头的方法)对调用该方法的实例变量进行操作.在实例方法中,self指的是调用者实例变量,而不是您尝试访问的类(或类别属性).
在您的类别示例中,您将从现有的NSString调用newString,如下所示:
NSString *myString = @"foo"; [myString newString];
换句话说,newString类别扩展对调用它的字符串进行操作.您可以更改该字符串,或返回不同的结果,但问题是您正在使用没有此类var属性或方法的NSString.
这就是为什么你会看到’没有这样的选择器消息’,因为NSString对你碰巧添加到你的类别中的无关属性一无所知.
>以new开头的方法对ARC具有特定含义.
另一个问题是,你已经用’new’开始了这个方法. Objective-C有一些与内存管理策略有关的特定命名约定.使用alloc,new,copy或mutableCopy启动方法会隐式告诉ARC您的方法(已创建和)正在返回一个保留对象.您的newString方法没有创建对象.
@H_419_4@ @H_419_4@以上是大佬教程为你收集整理的ios – 扩展属性在NSString类别中崩溃全部内容,希望文章能够帮你解决ios – 扩展属性在NSString类别中崩溃所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。