我在objc中使用C结构,并且我创建了一个函数来组装结构,就像Cocoa API中的结构一样.事情是这个结构不像NSRect那么NSPoint这个结构打包objc对象soo我在这里看到了潜在的内存泄漏.我是否需要提供"释放"结构的功能?
我没有创建一个ISKNewsCategory类,因为没有行为,但你认为这是一个好方法还是我应该定义类甚至不会有行为?
typedef struct ISK_NewsCategory {
NSString *name;
NSString *code
} ISKNewsCategory;
NS_INLINE ISKNewsCategory ISKMakeNewsCategory(NSString *name, NSString *code) {
ISKNewsCategory category;
category.name = [name retain];
category.code = [code retain];
return category;
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ger 11
一般来说,创建一个简单的容器类会好得多.这样,所有的内存管理都很简单,你可以在标准的Cocoa容器类中使用该对象,而无需将结构包装在一个NSValue或任何东西中.
以这种方式使用结构可能是唯一可接受的是,如果您具有极其性能关键的代码,其中对象开销可能会成为问题.
@interface ISKNewsCategory : NSObject
{
NSString *name;
NSString *code;
}
@property (copy) NSString *name;
@property (copy) NSString *code;
@end
@implementation ISKNewsCategory
@synthesize name,code;
- (void)dealloc
{
self.name = nil;
self.code = nil;
[super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)
截至 2018 年,您现在可以在 C 结构中使用 ObjC 指针,并且当结构位于内存中时它们会被保留。https://devstreaming-cdn.apple.com/videos/wwdc/2018/409t8zw7rumablsh/409/409_whats_new_in_llvm.pdf
| 归档时间: |
|
| 查看次数: |
8053 次 |
| 最近记录: |