Gab*_*iel 0 iphone objective-c ios
我想将属性添加到NSString对象.出于这个原因,我想继承它.
我尝试做这样的事情:
@interface MyString : NSString
@property (nonatomic) NSInteger userId;
@end
Run Code Online (Sandbox Code Playgroud)
所以我能做到
MyString *testString = [[MyString alloc] init];
testString = [MyString stringWithFormat:@"hello"];
testString.userId = 2;
NSLog(@"testString: %@", testString); //-> Want it to return "testString: hello"
NSLog(@"userId: %d", testString.userId); //-> Want it to return "userId: 2"
Run Code Online (Sandbox Code Playgroud)
我不知道如何子类NSString(创建存储设施,覆盖一些方法(length,characterAtIndex).有想法吗?
不要尝试子类NSString来执行此操作.创建一个全新的类,它是一个子类,NSObject并为其提供2个属性(以及一组方法来访问属性,如果您愿意).
尝试使用NSString过于复杂且不合适.
对于这一行:
NSLog(@"testString: %@", testString);
Run Code Online (Sandbox Code Playgroud)
您需要做的就是description在自定义类上实现该方法以返回字符串属性.然后在您使用时打印字符串NSLog.
正如您所发现的那样,对类集群类进行子类化非常棘手.这就是为什么,通常,它几乎从未完成.
相反,创建一个封装两个字符串的类; 在你的例子中指向@"hello"的字符串和userId.
@interface MyThingy:NSObject
@property(copy) NSString *stringData;
@property(copy) NSString *userId;
@end
Run Code Online (Sandbox Code Playgroud)
......等......
这将更灵活,将来更容易重构.
顺便说一句,这没有意义:
MyString *testString = [[MyString alloc] init];
testString = [MyString stringWithFormat:@"hello"];
Run Code Online (Sandbox Code Playgroud)
在手动保留/释放下,它是泄漏.在ARC下,这是一个无目的的分配.
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |