在我的类对象中,我已经定义了一个(nonatomic, retain)属性UIImage.我为此属性分配了一个通过加载的图像
[UIImage imageNamed:@"file.png"];
Run Code Online (Sandbox Code Playgroud)
如果在某些时候我想将此属性重新分配给另一个图像,我是否必须释放先前的参考?
我很困惑,因为通过retain属性我知道我应该释放它.但因为imageNamed:是一种方便的方法(不使用alloc),我不知道在这里应用什么规则.
感谢您的见解!
NSInvocation-retainArguments当你不NSInvocation立即运行时,它的方法很有用,但是稍后会这样做; 它保留了对象参数,因此它们在此期间保持有效.
众所周知,应该复制块参数而不是保留.我的问题是,是否-retainArguments知道复制而不是在块类型时保留参数?文档并没有表明它确实如此,但它似乎是一件容易和明智的事情.
更新: iOS 7中的行为似乎已经发生了变化.我刚刚对此进行了测试,并且在iOS 6.1和之前,-retainArguments没有复制块类型的参数.在iOS 7及更高版本中,-retainArguments复制块类型的参数.文档-retainArguments已更新,说它复制块,但它没有说明行为何时发生变化(这对支持旧操作系统的人来说真的很危险).
我们使用AWS EC2构建了一个网站,并在典型的LAMP堆栈(ubuntu)中自动扩展.
然而,缩放等工作得很好,因为实例是"临时的",我们的apache日志在加载峰值后不会被保留(因为我们不保留卷或实例).
是否有"最佳实践/最可靠"的方法来保留这些实例的apache日志?
一个想法是在关机期间将日志文件复制到S3,方法是编写一个bash脚本以使用该/etc/rc0.d功能执行(在关机时运行脚本).
我有一个保留/释放问题.我的视图非常复杂,所以我将NSZombieEnabled设置为YES,并试图确定哪个对象导致我悲痛.为了加快这个过程,我想知道是否有跟踪僵尸回到坟墓的暗示或技巧,他们挖出了自己的方式(对不起,不得不)或者,回到他们关联的对象?神秘的控制台消息似乎没有提供太多的见解:
NSInvocation: warning: object 0x1076850 of class '_NSZombie_CALayer' does not implement methodSignatureForSelector: -- trouble ahead
Run Code Online (Sandbox Code Playgroud)
我没有被称为"前方麻烦"的选择者.
编辑 - 包括堆栈跟踪:
#0 0x3026e017 in ___forwarding___
#1 0x3024a0a2 in __forwarding_prep_0___
#2 0x302042e8 in CFRelease
#3 0x00c4fc31 in CALayerUpdateSublayers
#4 0x00c4e173 in -[CALayer dealloc]
#5 0x00c4000e in CALayerRelease
#6 0x00c48dad in CALayerFreeTransaction
#7 0x00c410b8 in CA::Transaction::commit
#8 0x00c492e0 in CA::Transaction::observer_callback
#9 0x30245c32 in __CFRunLoopDoObservers
#10 0x3024503f in CFRunLoopRunSpecific
#11 0x30244628 in CFRunLoopRunInMode
#12 0x32044c31 in GSEventRunModal
#13 0x32044cf6 in GSEventRun
#14 0x309021ee in UIApplicationMain …Run Code Online (Sandbox Code Playgroud) 我正在制作iPhone游戏.我想释放已分配或保留的所有对象.在dealloc我发布所有这些对象的函数中,但后来我意识到有时候我还没有分配对象时最终释放对象.所以我想retainCount在发布它之前我需要检查它是否大于零.
我的问题是:
我只是检查是否retainCount大于零,然后释放它?
if([bg retainCount]!=0)
{
[bg release];
}
Run Code Online (Sandbox Code Playgroud)
要么
我应该多次发布它 retainCount
while([bg retainCount]!=0)
{
[bg release];
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
在从HTML提交数据后,servlet将这些数据添加到我的数据库并将结果消息转发到JSP页面.我希望在转发之后保留表单中最初提交的值.
在servlet中创建一个对象并添加我收到的所有参数并向JSP发送请求是否明智?还有另一种更好的方法吗?
这里完成PHP新手,几乎我以前的所有工作都是在ASP.NET中完成的.我现在正在研究一个PHP项目,我偶然发现的第一个摇滚是在回发中保留值.
对于最简单但仍然现实的例子,我有10个下拉菜单.它们甚至还没有数据包,因为这是我的下一步.它们是简单的下拉菜单.
我的整个页面都包含在标签中.每个下拉列表的onclick()事件,调用一个javascript函数,该函数将填充相应的下拉列表隐藏元素,并选择下拉列表值.然后,在页面重新加载时,如果该隐藏值不为空,我设置所选选项=我隐藏的选项.
这适用于单个回发.但是,当另一个下拉列表发生变化时,原始的第1个下拉列表会失去其值,因为其相应的隐藏值也会失去其价值!
这使我开始研究使用查询字符串或会话,或者......其他一些想法.
有人能指出我正确的方向,在我的情况下哪个选项最好?我是一个PHP新手,但是我被要求为我的技能水平做一些非常激烈的东西,所以我需要一些灵活的东西,并且更容易使用.
谢谢!
- - -编辑 - - -
对我的问题进行一点澄清:)
当我说'PostBack'时,我指的是提交的页面/表格.控件将传递回服务器,并再次执行HTML/PHP代码.
至于下拉和隐藏,我使用隐藏变量来保留"选定值"或"选定索引"的原因是,当提交页面时,我能够使用之前的选择重绘下拉列表,而不是默认回到第一个索引.当我使用$ _POST []命令时,我无法按名称检索下拉列表,但我能够按名称检索隐藏值.这就是为什么在下拉改变事件时,我调用javascript,它将选定的值从下拉列表设置为其相应的隐藏.
--------再次编辑--------好吧,好吧,我看到我需要退步并解释整体目标:)我很抱歉开始时不是很清楚.
我的最终设计将是一个页面,用户可以在其中选择我们公司内的部门,以查看数据.一旦部门选择(从下拉),那么我会显示更具体的数据选择下拉菜单中的:颜色,大小,供应商,风格,日期,商店#,等等......在这一点上我也将显示销售数据选定的部门.在选择任何颜色,尺寸等时,我将更新销售数据结果以满足新标准
---------编辑----------我不能提供对我的例子的外部访问,但这里是一个有探索的sceenshot.在下图中,用户将展开"部门"下拉列表,以选择一个部门.此时,下面的销售数据将根据该部门刷新.然后,用户将选择"分组依据"选项,例如商店,页面/数据将刷新以显示按商店分组的数据.然后他们可以在我的示例中选择一种颜色,例如黑色,数据将显示所选部门和颜色的销售额,按商店分组.
但是,为了完成所有这些操作,页面需要在每次刷新/发布时保留部门,颜色和分组下拉选项...

我是Objective-C的新手,所以这可能是一个愚蠢的问题.
我不禁看到ObjC和微软的COM在内存管理方面的相似之处(AddRef/ Releasevs retain/ release).在COM环境中,在将对象返回给调用者之前,或多或少地强加给你始终AddRef(retain)一个对象.从我到目前为止看到的(我是Mac®OSX(第3版)的Cocoa®编程的第三部分),内存管理部分有些模糊.
假设没有GC,返回对象的惯用方法是什么?
您好我正在使用ViewPager但我现在想要保留状态,而不是重新生成单元格.
我注意到viewpager非常类似于listviews的自定义适配器,并且它们的功能类似于listview在不再在屏幕上重新生成数据的情况,viewpager是相同的方式.
有没有办法在最初加载之后执行viewholder,某种保留每个视图状态的对象,以便viewpager单元加载更快.(每个单元格都有一些处理和渲染,但我会自己测试内存的限制)
考虑下面的代码以及HashSet4s在其他地方填充的事实.
我的目标是包含所有4个HashSets中常见的所有元素.
我的问题是,首先,我做得对吗?其次,如果我做得对,有没有更好的方法呢?如果没有,那么我对此问题有什么解决方案?
static Set<String> one=new HashSet<>();
static Set<String> two=new HashSet<>();
static Set<String> three=new HashSet<>();
static Set<String> four=new HashSet<>();
private static void createIntersectionQrels() {
ArrayList<String> temp = new ArrayList<>();
Set<String> interQrels = new HashSet<>();
temp.addAll(one);
one.retainAll(two);
interQrels.addAll(one);
one.addAll(temp);
one.retainAll(three);
interQrels.addAll(one);
one.addAll(temp);
one.retainAll(four);
interQrels.addAll(one);
one.addAll(temp);
interQrels.retainAll(two);
interQrels.retainAll(three);
interQrels.retainAll(four);
}
Run Code Online (Sandbox Code Playgroud) retain ×10
iphone ×2
objective-c ×2
amazon-ec2 ×1
android ×1
autoscaling ×1
cocoa ×1
cocoa-touch ×1
debugging ×1
forms ×1
hashset ×1
intersection ×1
java ×1
jsp ×1
logging ×1
nsinvocation ×1
php ×1
postback ×1
release ×1
retaincount ×1
servlets ×1
state ×1
uiimage ×1
view ×1