- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
毫无疑问,关于 iOS 中的内存管理有大量的信息。在阅读了大量相关内容后,我仍然不清楚某些情况下的“最佳”实践。请我对下面两个示例进行澄清...
我有一个 NSMutableArray,它充当 tableView 的数据源和一个名为 editButton 的 UIBarButtonItem,两者声明如下:
@interface MyTableViewController : UITableViewController {
NSMutableArray *datasourceArray;
UIBarButtonItem *editButton;
}
@property (nonatomic, retain) NSMutableArray *datasourceArray;
@property (nonatomic, retain) UIBarButtonItem *editButton;
@end
然后我合成它们并分配/初始化它们,如下所示:
@implementation
@syntesize datasourceArray, editButton;
-(void)viewDidLoad {
self.datasourceArray = [self retrieveDatasourceArray];
self.editButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(editTable)];
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:editButton, nil] animated:NO];
[editButton release];
}
-(void)retrieveDatasourceArray {
NSMutableArray *datasource = [[[NSMutableArray alloc] initWithObjects @"example1", @"example2", nil] autorelease];
return datasource;
}
-(void)dealloc {
[datasourceArray release];
[editButton release];
[super dealloc];
}
问题 1:NSMutableArray
正如您所看到的,我已将数组的实际创建分离为不同的方法,因为有很多代码从核心数据检索并正在进行排序(这个问题不需要),我想将其分离出来。因此,我选择返回一个自动释放的 NSMutableArray 并将其设置为头文件中定义的 self.datasourceArray 。这是一种明智且无泄漏的实现方式吗?
问题 2:编辑按钮
由于我稍后需要更改 editButton 的标题和样式,因此我需要访问它,因此声明它。然后,我在 viewDidLoad 方法中分配/初始化它,并将其添加到一个数组(此处未显示一些其他按钮),然后使用该数组将按钮添加到导航栏。然后我释放了 editButton,因为我已经分配了它并将其传递给一个数组。考虑到我的 dealloc 方法,这是必要的或必要的,还是在正确的位置?
提前非常感谢
编辑:进一步问题 3:
当在代码中的其他地方访问这些 ivars 中的任何一个时(例如,当调用 [datasourceArray count] 或将“编辑”按钮的标题重置为“完成”时,我是否应该使用 self.notation?
编辑:进一步的问题 4:
在其他地方,我使用以下代码来初始化合成的 NSMutableArray。鉴于以下答案,这是否更容易泄漏......?
[self setDatasourceArray: [[NSMutableArray arrayWithArray: [self retrieveDatasourceArray]];
最佳答案
数组的第一个点
NSMutableArray *datasource = [[[NSMutableArray alloc] initWithObjects @"example1", @"example2", nil] autorelease];
return datasource;
这里你正在做正确..返回一个自动释放对象..它将被变量保留,因为你将它定义为retain类型(当你做了@property
)。
编辑按钮的第二点
self.editButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(editTable)];
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:editButton, nil] animated:NO];
[editButton release];
在这里,您显然过度释放该对象。请记住该变量保留您定义的新变量。因此编辑按钮保留新的栏按钮项目。因此释放它。一次是必要的..您在 dealloc 中执行此操作..但是在这里释放也会导致过度释放..要解决此问题,只需删除释放行并将代码更新为这样
self.editButton = [[[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(editTable)]autorelease];
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:editButton, nil] animated:NO];
在这里您可以看到将要创建的新实例将自动释放..并且其值将由您的变量保留
关于iphone - ivars 的另一个内存管理查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10120374/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!