请教关于 Struct 结构体的问题

weidu23 2014-10-16 03:29:58
本人学从Java , 现在公司从事IOS开发,菜鸟级问题,高手勿喷 :
---------------------------
编译级环境种种 : ARC 、 LLMV 5.0
我在MCSharedObjectService.m文件定义了一个结构体 , 并打算使用结构体
【要问我为什么用结构体,答:在不影响项目情况下做实验】
----
MCSharedObjectServicer.m文件相关定义:

/// --- MCSharedObjectServicer.m 内容
#import "MCSharedObjectService.h"

#ifndef ____MCSharedObjectServiceStruct__

typedef struct __MCSharedObjectServiceStruct {
void * data ;
const char * key ;
}_MCSharedObjectServiceStruct_t;

#endif

@class MCSharedObjectServiceProviderException ;

@interface MCSharedObjectServicer()
{
_MCSharedObjectServiceStruct_t *sharedObjectService ;
}
@end

@implementation MCSharedObjectServicer : NSObject

- (id) init
{
self = [super init] ;
if( self ){
sharedObjectService = malloc(sizeof(_MCSharedObjectServiceStruct_t*)) ; // 结构体 创建空间
}
return self ;
}

- (void) sharedObject : (id) object objectKey : (NSString *) objectKey
{
if( self.delegate && [self.delegate respondsToSelector:@selector(sharedObject:objectKey:)] ){
[self.delegate sharedObject:object objectKey:objectKey] ;
}
else{
if( nil == object ){
@try {
object = [[NSClassFromString(objectKey) alloc] init] ; // 试图创建对象
}
@catch (NSException *exception) {
@throw [MCSharedObjectServiceProviderException exceptionWithReason:@"根据objectKey重构object对象失败" userInfo:exception.userInfo] ;
}
}
sharedObjectService->data = (__bridge void *)(object) ;
sharedObjectService->key = [objectKey cStringUsingEncoding:NSUTF8StringEncoding] ;
}
}
- (id) sharedObjectWithKey : (NSString *) objectKey
{
if( self.delegate && [self.delegate respondsToSelector:@selector(sharedObjectWithKey:)] ){
return [self.delegate sharedObjectWithKey:objectKey] ;
}
return (__bridge id)(sharedObjectService->data) ;
}
。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
@end


调用过程如下:
[provider sharedObject:nil objectKey:className] ; // 设置是正确的

[provider sharedObjectWithKey:className] // 发生错误 的 被调用的函数

return (__bridge id)(sharedObjectService->data) ; // sharedObjectWithKey 错误的具体位置

我不理解,我是怎么错了,导致sharedObjectWithKey总是发生 EXC_BAD_ACCESS(野指针 ???)问题
...全文
214 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weidu23 2014-10-16
  • 打赏
  • 举报
回复
引用 13 楼 hslinux 的回复:

sharedObjectService = malloc(sizeof(_MCSharedObjectServiceStruct_t*)) ; // 结构体 创建空间
LZ确定这样能分配到足够的结构体空间?
已改正此处: sharedObjectService = (_MCSharedObjectServiceStruct_t*)malloc(sizeof(_MCSharedObjectServiceStruct_t))
hslinux 2014-10-16
  • 打赏
  • 举报
回复

sharedObjectService = malloc(sizeof(_MCSharedObjectServiceStruct_t*)) ; // 结构体 创建空间
LZ确定这样能分配到足够的结构体空间?
sudaxia 2014-10-16
  • 打赏
  • 举报
回复
楼主问的好问题
weidu23 2014-10-16
  • 打赏
  • 举报
回复
引用 7 楼 zhanglei5415 的回复:
你这个MCSharedObjectServicer类的职责是做什么用的? 在这个类里使用的delegate的也比较怪异,简单说一下你的想法。
至于您说delegate奇怪 ,我不太好向您解决 。 如果您方便,留下联系方式,我吧servicer - provider - serviceProvider 这部分代码发给您
weidu23 2014-10-16
  • 打赏
  • 举报
回复
引用 7 楼 zhanglei5415 的回复:
你这个MCSharedObjectServicer类的职责是做什么用的? 在这个类里使用的delegate的也比较怪异,简单说一下你的想法。
问题已解决 , 只是个受“服务对象”约束的 接口 。 也就是 servicer - provider - serviceProvider 模式 。。。 在 Effective Java 中 , 称之为 “ 服务提供者 ” 模式,我只是顺手放到 IOS 中来 。 以上是其中一部分代码 。 ---------- 明日结贴发分 , 谢谢你的回复
消失2099 2014-10-16
  • 打赏
  • 举报
回复
ios大神还有5秒抵达战场
永远的小贤 2014-10-16
  • 打赏
  • 举报
回复
没接触过ios,不过还是顶一下
ReyZhang 2014-10-16
  • 打赏
  • 举报
回复
你这个MCSharedObjectServicer类的职责是做什么用的? 在这个类里使用的delegate的也比较怪异,简单说一下你的想法。
飘逸的风衣 2014-10-16
  • 打赏
  • 举报
回复
好高深的感觉,完全看不懂
weidu23 2014-10-16
  • 打赏
  • 举报
回复
引用 3 楼 lxxiangyong 的回复:
楼主问的好问题
收到 。。。。。。
weidu23 2014-10-16
  • 打赏
  • 举报
回复
引用 2 楼 u012914981 的回复:
顶楼主,坐等高人解答
谢谢 , 问题已解决 , 明天结贴 , 发分给你
lxxiangyong 2014-10-16
  • 打赏
  • 举报
回复
楼主问的好问题
  • 打赏
  • 举报
回复
顶楼主,坐等高人解答
weidu23 2014-10-16
  • 打赏
  • 举报
回复
自己先顶顶 , 防止帖子沉了 , 没人帮助解答问题 。。。

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧