• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 通过引用(指针)传递与iOS对象冲突?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 22:43:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有几个 UITableView/s 和 UILabel/s 的 View 。我正在以编程方式创建它们(即不使用 NIB)。

我已经在一个带有签名的方法中合并了 tableView 和标签的创建:

- (void) CreateTableViewUITableView*) outTableView andLabelUILabel*)OutLabel AtFrameCGRect) frame{
CGRect labelFrame = frame;
labelFrame.origin.x = LABEL_LEFT_ALIGNMENT;
labelFrame.origin.y -= LABEL_TOP_ALIGNMENT;
labelFrame.size.height = LABEL_HEIGHT;
outLabel = [[UILabel alloc] initWithFrame:labelFrame];
[[self view] addSubviewutLabel];

outTableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStyleGrouped];
[outTableView setDataSource:self];
[outTableView setDelegate:self];
[[self view] addSubviewutTableView];
}

这里,outTableView 和 outLabel 是输出参数。也就是说,方法完成后,调用者将使用outTableView和outLabel。

我的应用有 3 个 tableview 实例变量——tableView1、tableView2、tableView3。以及三个标签实例变量。查看 Controller (调用者)调用,如:

   [self CreateTableView:tableView1 andLabel:label1 AtFrame:frame1];
   [self CreateTableView:tableView2 andLabel:label2 AtFrame:frame2];
   [self CreateTableView:tableView3 andLabel:label3 AtFrame:frame3];

此方法完成后,UILabel* 将呈现在屏幕上,调用者可以使用 UILabel* 对象。奇怪的是,UITableView* 对象并非如此。

任何想法,为什么会有不同的行为?

注意:我的应用程序已启用 ARC。



Best Answer-推荐答案


错了。参数实际上并不包含已分配/初始化的实例,因为您通过值而不是通过引用传递它们。考虑传递一个指向对象的指针,然后在分配新实例时取消引用它:

- (void)createTableViewUITableView **)tvPtr
{
    *tvPtr = [[UITableView alloc] init...];
    // etc.
}

这样调用:

UITableView *tv;
[self createTableView:&tv];

关于ios - 通过引用(指针)传递与iOS对象冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231286/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap