Tag: 类别

在运行时获取类的详细信息?

在Objective-C中,有没有办法在运行时列出特定类别的类别? 使用Objective-C运行时函数,我可以获得类和实例方法,类层次结构,实例variables等的细节,但看起来不是类别信息。 看着F-Script,我发现它不显示类别信息(事实上,看起来不是根据类别显示方法)。 另一方面,类转储提取类别信息,但这是从二进制,而不是在运行时。 在objc / runtime.h中提到了struct objc_category,但是这看起来是私有的。 有支持的方式吗?

'BOOL'(又名'signed char')到'id'的隐式转换,objc_setAssociatedObject

我正在使用关联的引用作为我的类别的属性的存储 头文件包含: @interface UIImageView (Spinning) @property (nonatomic, assign) BOOL animating; @end 执行是 – (void)setAnimating:(BOOL)value { objc_setAssociatedObject(self, animatingKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } 但是,我得到了上面的行警告 Implicit conversion of 'BOOL' (aka 'signed char') to 'id' is disallowed with ARC 如果你知道我在这里做错了什么,请帮助如何避免这个问题

如何在iPhone设备上使用AVAudioSessionCategoryMultiRoute?

我想使用AVAudioSessionCategoryMultiRoute,但不幸的是在苹果开发中心和Google上都没有例子。 如何使用/实现AVAudioSessionCategoryMultiRoute为了定义iPhone上的2个不同的路线ios7.0.4? 我的目标是通过扬声器和耳机路由audio。 (我知道这是不可能的,但我想尝试与ios7) 感谢您的帮助,

NSObject类别 – 保持安全

苹果有这样的说法 : 根类的分类 一个类别可以向任何类添加方法,包括根类。 添加到NSObject的方法可用于链接到您的代码的所有类。 用类别向根类中添加方法有时可能是有用的,但也可能是相当危险的。 虽然这个类别所做的修改看起来似乎很好理解而且影响有限,但inheritance给它们的范围很广。 您可能会对您的应用程序中看不见的类进行意外更改; 你可能不知道你在做什么的所有后果。 而且,其他工作在你的应用程序上,不知道你的变化,不会明白他们在做什么。 我的问题是,如果我select的方法名称足够怪异,我确信没有其他人会使用它们(无论是在苹果公司还是在我的项目中),我是否仍然会陷入困境? 难道还会有意外的行为吗? 性能影响?

IOS开发中的协议,扩展和类别有什么区别? 以及如何适当地使用它们?

另外,Swift和Objective-C语言之间的这三样东西是否有区别? 谢谢。

一个单一的实例,而不是一个类

我有一个类NSObject应该这样做的东西。 当我在对象上调用它时,我想重写它的dealloc方法来做一些清理。 我想使用方法swizzling做,但无法弄清楚如何。 我发现的唯一例子是如何replace整个类的方法实现(在我的情况下,它会覆盖所有NSObject的dealloc – 我不想)。 我想重写NSObject的特定实例的dealloc方法。 @interface NSObject(MyCategory) -(void)test; @end @implementation NSObject(MyCategory) -(void)newDealloc { // do some cleanup here [self dealloc]; // call actual dealloc method } -(void)test { IMP orig=[self methodForSelector:@selector(dealloc)]; IMP repl=[self methodForSelector:@selector(newDealloc)]; if (…) // 'test' might be called several times, this replacement should happen only on the first call { […]

如何在Objective-C中添加一个variables到类别?

需要用一个新的variables(NSArraytypes)创build一个类别。 OriginalClass + Extension.h: @interface OriginalClass (Extension) { NSArray *_array; } @property (nonatomic, retain) NSArray *array; @end 但是我得到了错误: Cannot declare variable inside @interface or @protocol 。 请帮忙解决这个问题。

iOS:在运行时找不到NSURLSession类别的方法

我想在NSURLSession上创build一个类别。 该应用程序编译好,但是当我试图调用我得到的类别方法 -[__NSCFURLSession doSomething]: unrecognized selector sent to instance 0xbf6b0f0 <unknown>:0: error: -[NSURLSession_UPnPTests testCategory] : -[__NSCFURLSession doSomething]: unrecognized selector sent to instance 0xbf6b0f0 很奇怪,这里是一个testing课,我用来展示这个问题。 NSString类别工作正常,但NSURLSession类别在运行时找不到方法。 我怀疑这是内在的东西。 意见请:-) #import <XCTest/XCTest.h> @interface NSString (test) -(void) doSomethingHere; @end @implementation NSString (test) -(void) doSomethingHere { NSLog(@"Hello string"); } @end @interface NSURLSession (test) -(void) doSomething; @end @implementation NSURLSession (test) -(void) […]

Objective-C中的类别不起作用

我正在开发一个需要部署到iOS 3.1.3的iOS应用程序。 我需要扩展NSData类的一些function,并在NSData + Base64中使用以下代码(截断以显示有趣的部分): 的NSData + Base64.h […] @interface NSData (Base64) + (NSData *)dataFromBase64String:(NSString *)aString; – (NSString *)base64EncodedString; @end 的NSData + Base64.m @implementation NSData (Base64) […] // // base64EncodedString // // Creates an NSString object that contains the base 64 encoding of the // receiver's data. Lines are broken at 64 characters long. // […]

在类别接口/实现中设置新的属性

好吧,所以我有这个,但它不会工作: @interface UILabel (touches) @property (nonatomic) BOOL isMethodStep; @end @implementation UILabel (touches) -(BOOL)isMethodStep { return self.isMethodStep; } -(void)setIsMethodStep:(BOOL)boolean { self.isMethodStep = boolean; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if(self.isMethodStep){ // set all labels to normal font: UIFont *toSet = (self.font == [UIFont fontWithName:@"Helvetica" size:16]) ? [UIFont fontWithName:@"Helvetica-Bold" size:16] : [UIFont fontWithName:@"Helvetica" size:16]; id superView = […]