如何在xcode中避免此警告.这是代码片段:
[player(AVPlayer object) addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100)
queue:nil usingBlock:^(CMTime time) {
current+=1;
if(current==60)
{
min+=(current/60);
current = 0;
}
[timerDisp(UILabel) setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];///warning occurs in this line
}];
Run Code Online (Sandbox Code Playgroud) cocoa-touch objective-c retain avplayer automatic-ref-counting
在启用ARC的代码中,如何在使用基于块的API时修复有关潜在保留周期的警告?
警告:
Capturing 'request' strongly in this block is likely to lead to a retain cycle
由这段代码生成:
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:...
[request setCompletionBlock:^{
NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.rawResponseData error:nil];
// ...
}];
Run Code Online (Sandbox Code Playgroud)
警告与request块内对象的使用相关联.
cocoa cocoa-touch retain asihttprequest automatic-ref-counting
使用Xcode 4.2和ARC,我注意到自动生成的代码NSManagedObject对于属性仍然如下:
@property (nonatomic, retain) NSString * someString;
Run Code Online (Sandbox Code Playgroud)
1)retain现在不应该用strong或替换weak?
2)为什么自动生成的代码仍然使用 retain
3)retain在此属性声明中,正确的替换是什么?
我正在调试使用的问题NSFetchRequest,我认为这可能是问题的根源.思考?
properties objective-c retain nsmanagedobject automatic-ref-counting
一个101问题
假设我正在制作汽车数据库,每个汽车对象定义为:
#import <UIKit/UIKit.h>
@interface Car:NSObject{
NSString *name;
}
@property(nonatomic, retain) NSString *name;
Run Code Online (Sandbox Code Playgroud)
为什么@property(nonatomic, retain) NSString *name;不@property(nonatomic, assign) NSString *name;呢?
据我所知,assign这不会增加引用计数器retain.但是为什么要使用retain,因为它是对象的name成员todo,它的范围就是它自己.
没有其他外部功能也会修改它.
在Cocoa Touch项目中,我需要一个特定的类,不仅要有一个委托对象,还要有很多委托对象.
看起来我应该为这些代表创建一个NSArray; 问题是NSArray会保留所有这些代理,它不应该保留(按惯例对象不应该保留它们的代理).
我应该编写自己的数组类来防止保留还是有更简单的方法?谢谢!
如果我这样做:
@interface RegisterController : UIViewController <UITextFieldDelegate>
{
IBOutlet UITextField *usernameField;
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
@interface RegisterController : UIViewController <UITextFieldDelegate>
{
UITextField *usernameField;
}
@property (nonatomic, retain) IBOutlet UITextField *usernameField;
Run Code Online (Sandbox Code Playgroud)
会发生什么坏事吗?我知道在第二种情况下,该字段被保留,但是由于笔尖拥有该字段,这是否会有所不同?没有保留,这个领域会消失吗?在什么情况下?第一种情况下的代码工作,想知道这是否是内存管理方面的问题.
最近我修了某人的代码.有一个大课堂不会dealloc.您必须使用5或6个版本来获取它以获得dealloc.
我仔细查看了大班,最终找到了需要发布的各种东西.
这让我想到:只需要一些非常简单的方法来"找到"物体上的所有保留物.我是对的吗?
那么,有没有一种简单的方法来"找到对象上的所有保留"?是否有其他人都知道的XCode或Instruments中的按钮?
当你找不到像这样的谜团时你会怎么做?
所以在iOS世界中,如果有人知道"显示所有保留来自此对象的位置"按钮 - 谢谢!
PS注意没有泄漏,这个问题与泄漏完全无关.对象简单地"完全正确"不会释放.
后来......
法比奥为这个问题提供了令人震惊的解决方案.九个字,这里是:
-(id)retain
{
NSLog(@"%@", [NSThread callStackSymbols]);
return ([super retain]);
}
Run Code Online (Sandbox Code Playgroud)
这在许多情况下非常有用,并且会带来许多其他有用的东西.法比奥,你可能每年为我节省了两个人工周的工作.谢谢!
顺便说一句,如果你刚刚掌握了这个并且在输出上苦苦挣扎,我看到通常会有许多以"UINib instantiateWithOwner:"为特色的块.看起来这些将首先出现,重要的大块将会出现.
是什么区别copy,并retain为NSString?
- (void)setString:(NSString*)newString
{
string = [newString copy];
}
Run Code Online (Sandbox Code Playgroud) 我是内存托管代码的新手,但我很清楚这个想法.
在我的应用程序通过XCode中的泄漏工具,我注意到我只需要清理我的自定义对象,但不是动态创建的数组,所以我认为这些数据类型是自动释放的 - 这是有意义的,因为我只需要释放数组我用作具有(保留)它们的属性.
然后我注意到一些奇怪的事情:我在某个初始化的数组上得到了泄漏:
NSMutableArray *removals = [NSMutableArray new];
Run Code Online (Sandbox Code Playgroud)
但不是类似的
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:9];
Run Code Online (Sandbox Code Playgroud)
现在,一个用"new"设置的原因是它可能有0-99个项目,而另一个我知道它总是9个.因为两个数组后来都根据用户传递给同一个方法互动,如果我没有在方法结束时发布,或者如果我做了,则要么是泄漏!
我将第一个数组更改为
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:99];
Run Code Online (Sandbox Code Playgroud)
我没有泄漏,也没有发布任何东西.谁能解释一下?
我在Servlet中有SortedMap来填充JSP中的下拉值,我有以下代码
SortedMap<String, String> dept = findDepartment();
request.setAttribute("dept ", dept);
Run Code Online (Sandbox Code Playgroud)
在JSP中
<select name="department">
<c:forEach var="item" items="${dept}">
<option value="${item.key}">${item.value}</option>
</c:forEach>
</select>
Run Code Online (Sandbox Code Playgroud)
我正在使用一个JSP页面进行插入和更新.当我在编辑页面时,如何设置所选值以下拉选择值来自数据库的位置.