Objective-c – iOS 5:使NSString类别包括NSCFConstantString?

我有一个Nsstring类别类(Nsstring URLEncoding.h).
我正在运行和未知的选择器崩溃,因为我调用category方法的字符串已经被iOS优化为NSCFConstantString.
-[__NSCFConstantString URLEncodedString]: unrecognized selector sent to instance 0x290174

我从iOS 5中了解了NSCFConstantString与NSCFString优化:
http://www.cocoanetics.com/2012/03/beware-of-nsstring-optimizations/

有人知道我如何获得Nsstring类别包括Constant字符串,甚至强制var为Nsstring / NSCFString而不是NSCFConstantString?

干杯,
ž

-编辑-

>链接器标志-ObjC -all_load都已经实现了
Nsstring URLEncoding.m包含在目标编译源中
> Nsstring URLEncoding.m实现URLEncodedString方法.
>检查僵尸.

我正在向ShareKit 2.0添加一个共享服务

标题

@interface Nsstring (OAURLEncodingAdditions)

- (Nsstring *)URLEncodedString;

执行:

@implementation Nsstring (OAURLEncodingAdditions)

- (Nsstring *)URLEncodedString 
{
    Nsstring *result = (Nsstring *)CFURLCreateStringByAddingPercentEscapes(kcfAllocatorDefault,(CFStringRef)self,NULL,CFSTR("!*'();:@&=+$,/?%#[]"),kcfStringEncodingUTF8);
    [result autorelease];
    return result;
}

解决方法

链接器有一个问题,可能导致其死码剥离完全省略只包含obj-c类别的任何对象文件(否则未被引用).理论上将-ObjC标志传递给链接器应该会解决这个问题,但这似乎并不总是起作用.您可以通过提供-all_load链接器标志来解决此问题,这将导致链接器始终链接到所有对象文件中.

请注意,如果您的类别是您在某个地方包含的子项目或库的一部分,则可能必须在父项目上设置-all_load.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...