标签: retain

在这个区块中强烈捕获自我可能会导致保留周期

如何在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

205
推荐指数
5
解决办法
8万
查看次数

修复警告"在此块中强烈捕获[某个对象]可能会导致启用ARC的代码中的保留周期"

在启用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

140
推荐指数
4
解决办法
5万
查看次数

ARC的@property定义:强还是保留?

使用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

80
推荐指数
2
解决办法
3万
查看次数

Objective-C 101(保留vs赋值)NSString

一个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,它的范围就是它自己.

没有其他外部功能也会修改它.

iphone objective-c nsstring retain ios

54
推荐指数
6
解决办法
7万
查看次数

代表的非保留数组

在Cocoa Touch项目中,我需要一个特定的类,不仅要有一个委托对象,还要有很多委托对象.

看起来我应该为这些代表创建一个NSArray; 问题是NSArray会保留所有这些代理,它不应该保留(按惯例对象不应该保留它们的代理).

我应该编写自己的数组类来防止保留还是有更简单的方法?谢谢!

iphone cocoa-touch delegates retain nsarray

43
推荐指数
5
解决办法
1万
查看次数

如果我不保留IBOutlet会怎样?

如果我这样做:

@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)

会发生什么坏事吗?我知道在第二种情况下,该字段被保留,但是由于笔尖拥有该字段,这是否会有所不同?没有保留,这个领域会消失吗?在什么情况下?第一种情况下的代码工作,想知道这是否是内存管理方面的问题.

iphone retain

39
推荐指数
3
解决办法
1万
查看次数

有没有办法"找到神秘的保留"......?

最近我修了某人的代码.有一个大课堂不会dealloc.您必须使用5或6个版本来获取它以获得dealloc.

我仔细查看了大班,最终找到了需要发布的各种东西.

这让我想到:只需要一些非常简单的方法来"找到"物体上的所有保留物.我是对的吗?

那么,有没有一种简单的方法来"找到对象上的所有保留"?是否有其他人都知道的XCode或Instruments中的按钮?

当你找不到像这样的谜团时你会怎么做?

所以在iOS世界中,如果有人知道"显示所有保留来自此对象的位置"按钮 - 谢谢!

PS注意没有泄漏,这个问题与泄漏完全无关.对象简单地"完全正确"不会释放.


后来......

法比奥真正令人震惊的解决方案:

法比奥为这个问题提供了令人震惊的解决方案.九个字,这里是:

-(id)retain
    {
    NSLog(@"%@", [NSThread callStackSymbols]);
    return ([super retain]);
    }
Run Code Online (Sandbox Code Playgroud)

这在许多情况下非常有用,并且会带来许多其他有用的东西.法比奥,你可能每年为我节省了两个人工周的工作.谢谢!

顺便说一句,如果你刚刚掌握了这个并且在输出上苦苦挣扎,我看到通常会有许多以"UINib instantiateWithOwner:"为特色的块.看起来这些将首先出现,重要的大块将会出现.

iphone memory-management retain xcode4

34
推荐指数
3
解决办法
5321
查看次数

"复制"和"保留"有什么区别?

是什么区别copy,并retainNSString

- (void)setString:(NSString*)newString
{
    string = [newString copy];
}
Run Code Online (Sandbox Code Playgroud)

copy objective-c nsstring retain

30
推荐指数
5
解决办法
3万
查看次数

Objective C版本,自动释放和数据类型

我是内存托管代码的新手,但我很清楚这个想法.

在我的应用程序通过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)

我没有泄漏,也没有发布任何东西.谁能解释一下?

iphone xcode release objective-c retain

25
推荐指数
2
解决办法
4万
查看次数

使用JSTL为JSP下拉选择的值

我在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页面进行插入和更新.当我在编辑页面时,如何设置所选值以下拉选择值来自数据库的位置.

jsp jstl retain drop-down-menu

24
推荐指数
2
解决办法
14万
查看次数