简而言之,当属性值发生变化时,我必须更新代码中的一些逻辑,例如:
- (void)setProp:(NSString *)theProp
{
if (prop != theProp){
[prop release];
prop = [theProp copy];
[self myLogic];
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"prop"]){
[self myLogic];
}
}
Run Code Online (Sandbox Code Playgroud)
哪种方式最好,为什么?
编辑:我完全采用第二种方式,因为我不知道编译器会@synthesize为我生成指令,我选择相信编译器比我欠的setter实现更聪明,因此我不会破坏某些东西.
当一些代码像这样:
objc_setAssociatedObject (
obj,
&key,
val,
OBJC_ASSOCIATION_RETAIN
);
Run Code Online (Sandbox Code Playgroud)
我需要打电话给相关的
objc_setAssociatedObject (
obj,
&key,
nil,
OBJC_ASSOCIATION_RETAIN
);
Run Code Online (Sandbox Code Playgroud)
释放保留值?Objective-C运行时是否在dealloc某处或某处自动释放关联引用?
CTFontRef 提供了很好的方法,例如CTFontGetGlyphsForCharacters将字符映射到字形。我的问题是,是否有任何反转映射的方法?也就是说,我可以通过给定的字形获得字符吗?由于我发现有一个CTFontCopyCharacterSet用于获取所有支持的字符,我认为会有一些不错的解决方案。
我不喜欢ARC.
但ARC的最重要特征是归零弱参考,在非ARC下缺失.目前我正在使用MAZeroingWeakRef,它可以工作,但hacky,有时会使代码多余.将弱引用归零的任何其他方法?
在iOS中,你不知道字体文件路径(我的意思是,虽然你可以在/ System的某个地方看到它们,但是没有用于获取字体路径的API,它们可能在将来被更改),访问字体就是它的名字,例如.[UIFont fontWithName...],CGFontCreateWithFontName等等.
我需要在我的项目中使用的FreeType,我要转换CGFontRef到FT_Face,但正如上面提到的,我不能让字体的文件路径,所以我不知道是否有某种方式来创建FT_Face从CGFontRef?
objective-c ×3
associative ×1
c ×1
cocoa ×1
core-text ×1
freetype ×1
ios ×1
properties ×1
reference ×1
setter ×1