HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 扩展属性在NSString类别中崩溃大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_419_4@
我刚刚在Category类中创建了一个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@
@H_419_4@
@H_419_4@
本图文内容来源于网友网络收集整理提供,作为学习参使用,版权属于原作者。

猜你在找的iOS相关文章

目前,苹果开发者账号可分为三种类型:个人、公司、企业,且三者的费用以及权限等不尽相同。 1.个人账号 费用:99 美元/年 协作人数:仅限开发者自己 不需要填写公司的邓百氏编码( D-U-N-S Nu
Symbol Value meaning NULL (void *)0 literal null value for C pointers nil (id)0 literal null value for Objective-C objects nil:对象为空定义某一实例对象为空值。例如:NSObject* obj = nil;if (...
Android篇环境要求1 安装winrar,然后配置winrar的环境变量,要用到winrar指令2 配置java的bin目录到环境变量,要用到jarsigner指令重签名步骤说明:1 从母包复制一个子包2 删除子包的签名文件META-INFO3 根据需要修改子包的文件,比如渠道号文件之类4 重签名子包对应的python脚本import os...
转载注明出处:https://blog.csdn.net/joosonmao/article/details/21172835刚接触iOS开发的人难免会对苹果的各种证书、配置文件等不甚了解,可能你按照网上的教程一步一步的成功申请了真机调试,但是还是对其中的缘由一知半解。这篇文章就对Certificate、Provisioning Profile等做个总结。 1.概念介绍如果你拥有一个开...
转载注明出处:https://www.jianshu.com/p/567d3b730608iOS armv7, armv7s, arm64区别与应用32位、64位配置历程2015年2月1日不允许不支持arm64的应用的提交; iOS10发布后,如果你的应用中使用到了32位的类、库,没有相应支持64位机型的库,则首次启动后会弹窗式提示:“ xxx可能使iPhone变慢...”; iO...
iOS9以下的自己越狱后,通过PP助手备份到电脑或者直接通过pp助手直接下载 
转载注明出处:https://www.cnblogs.com/mtystar/p/6082363.html0x01 静态库与动态库的区别1.静态库和动态库的存在形式上的区别静态库 .a .framework 动态库 .dylib (在Xcode 8里面,看到后缀为.tbd的库,它的本质都是.dylib文件) .framework 2.静态库和动态库在使用上的区别...
终端中运行xcodebuild -showsdks

ios – 扩展属性在NSString类别中崩溃

微信公众号搜 "程序精选"关注

大佬总结

以上是大佬教程为你收集整理的ios – 扩展属性在NSString类别中崩溃全部内容,希望文章能够帮你解决ios – 扩展属性在NSString类别中崩溃所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。