我大部分时间都看过这段代码.这里定义了两个变量名,并且在实现中通过赋值进行合成.做这样的事情的目的是什么?喜欢保留2个单独的变量名称.这是一种惯例吗?
Test.h
@interface Test {
id<something> _variable1;
}
@property (nonatomic, retain) id<something> variable2;
Run Code Online (Sandbox Code Playgroud)
Test.m
@synthesize variable2 = _variable1
Run Code Online (Sandbox Code Playgroud) 由于以下错误,我的应用程序崩溃了:
-[NSCFString count]: unrecognized selector sent to instance 0x612b060
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我它是什么意思,我怎样才能在我的代码中找到参考号为0x612b060的行
我知道这个想法完全打破了封装,但是说我有以下类扩展:
@interface MyClass () {
int reallyImportantIvar;
}
// ...
@end
Run Code Online (Sandbox Code Playgroud)
通常,类的行为应该在Objective-C层内部 - 发送和接收消息等.但是有一个('公共')子例程,我需要最好的性能和非常低的延迟,所以我更喜欢使用一个C方法.当然,如果我这样做,我就无法再访问reallyImportantIvar,这是我的性能关键任务的关键.
看来我有两个选择:
我的问题是:选项2是否可能,如果可行,它的开销是多少?(例如,我还在查看O(n)算法来查找类的实例变量吗?)
我有下一个代码:
// UITextField+Navigation.h
@interface UITextField (Navigation)
@property (weak, nonatomic) UIControl *nextUIControl;
@end
//UITextField+Navigation.m
@implementation UITextField (Navigation)
- (UIControl *) nextUIControl {
return objc_getAssociatedObject(self, &defaultHashKey);
}
- (void) setNextUIControl:(UIControl *)nextUIControl {
objc_setAssociatedObject(self, &defaultHashKey, nextUIControl, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
Run Code Online (Sandbox Code Playgroud)
有什么区别:
return objc_getAssociatedObject(self, &defaultHashKey);
Run Code Online (Sandbox Code Playgroud)
和
return self.nextUIControl;
Run Code Online (Sandbox Code Playgroud)
我试过两种方式,第二种进入无限循环......为什么?也许这是一个明显的答案,但我是初学者^^'
提前致谢.
好的,我以前从未见过这个.这是我的代码:
@try {
[self.avPlayer removeObserver:self forKeyPath:@"status"];
[self.avPlayer removeObserver:self forKeyPath:@"rate"];
} @catch (NSException *exception) {
} @finally {
}
Run Code Online (Sandbox Code Playgroud)
您可以清楚地看到,我在@try块中有这两行代码.但是,它仍然会崩溃我的应用程序.这是未捕获的异常消息:
无法从<AVPlayer 0x7fa8d714ad70>中删除观察者<SoulHLECellView 0x7fa8d2b536b0>作为关键路径"status",因为它未注册为观察者.
所以,非常清楚,这是由我上面发布的代码引起的.这怎么可能?我在这里错过了什么?