Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Objective-C NSString类别Getter/Setter崩溃_Ios_Objective C_Nsstring_Objective C Category - Fatal编程技术网

Ios Objective-C NSString类别Getter/Setter崩溃

Ios Objective-C NSString类别Getter/Setter崩溃,ios,objective-c,nsstring,objective-c-category,Ios,Objective C,Nsstring,Objective C Category,我正在尝试创建NSString类别,但应用程序在尝试访问getter/setter时崩溃 #import <Foundation/Foundation.h> #import <AddressBook/AddressBook.h> @interface NSString (MyCat) @property (assign, nonatomic) ABRecordRef personRef; - (void)setPersonRef:(ABRecordRef)perso

我正在尝试创建NSString类别,但应用程序在尝试访问getter/setter时崩溃

#import <Foundation/Foundation.h>
#import <AddressBook/AddressBook.h>

@interface NSString (MyCat)

@property (assign, nonatomic) ABRecordRef personRef;

- (void)setPersonRef:(ABRecordRef)personRef;
- (ABRecordRef)personRef;

@end
#导入
#进口
@接口字符串(MyCat)
@财产(转让,非原子)ABRecordRef personRef;
-(无效)setPersonRef:(ABRecordRef)personRef;
-(ABRecordRef)personRef;
@结束


有人能指出这个问题吗?

您不能通过类别向类添加属性。允许添加方法,因为它不会增加类的大小。属性不仅添加getter和setter方法,还向类添加字段。向现有类添加属性/字段的最佳方法是将其子类化。

您不能通过类别向类添加属性。允许添加方法,因为它不会增加类的大小。属性不仅添加getter和setter方法,还向类添加字段。向现有类中添加属性/字段的最佳方法是对其进行子类化。

不要因为代码崩溃而感谢我,这不是我造成的。您是否收到了一条关于崩溃的错误消息?最可能的问题是(缺少)使用ABRecordRef进行内存管理。无需在
@接口中声明setter/getter
——这些都由
@属性的存在所暗示。你应该展示你的setter/getter代码。你能举例说明这个属性的用法和你的getter/setter的实现吗?不要因为你的代码崩溃而感谢我,这不是我造成的。你有错误消息来解释崩溃吗?最可能的问题是(缺少)使用ABRecordRef进行内存管理。无需在
@接口中声明setter/getter
——这些都由
@属性的存在所暗示。你应该展示你的setter/getter代码。你能举一个例子说明这个属性的用法和你的getter/setter的实现吗?属性实际上只是承诺提供某些访问器方法。属性并不一定意味着实例变量的存在。好的,在一个类别中添加属性是很有可能的。@Caleb不,属性也会将属性的存储添加到类中,否则自动生成的setter/getter会将您正在设置获取的数据存储在哪里?Caleb实际上,从某种意义上讲,您是对的,但是在某些时候您确实需要为属性设置一个备份字段。大多数情况下,编译器会自动为您调用@sythesize。但是,在这种情况下,这将不起作用,因为NSString已经编译到SDK中。试图设置由类别添加的属性会导致崩溃。这是因为您没有在类别中实现它们(您可能没有实现该类别),而不是因为您无法在类别中添加属性。苹果在iOS 3.1中添加了和朋友,以支持在类别中添加属性。属性实际上只是承诺提供某些访问方法。属性并不一定意味着实例变量的存在。好的,在一个类别中添加属性是很有可能的。@Caleb不,属性也会将属性的存储添加到类中,否则自动生成的setter/getter会将您正在设置获取的数据存储在哪里?Caleb实际上,从某种意义上讲,您是对的,但是在某些时候您确实需要为属性设置一个备份字段。大多数情况下,编译器会自动为您调用@sythesize。但是,在这种情况下,这将不起作用,因为NSString已经编译到SDK中。试图设置由类别添加的属性会导致崩溃。这是因为您没有在类别中实现它们(您可能没有实现该类别),而不是因为您无法在类别中添加属性。苹果在iOS 3.1中添加了和好友,以支持在类别中添加属性。