标签: retain

NSArray属性:复制还是保留?

根据这个:NSString属性:复制还是保留?

对于NSString/NSMutableString,建议使用copy.

NSArray/NSMutableArray怎么样?

copy properties objective-c retain nsarray

21
推荐指数
4
解决办法
1万
查看次数

从NIB加载后,IBOutlet实例为(null)

我正在开发一个iPhone应用程序,并且在控制器中获取(null)对IBOutlet字段的引用.我有一个UIViewController子类,在我的XIB中设置为File的所有者.我有一组连接到控制器的UI元素.从NIB加载并尝试在这些UI元素上设置属性后,我发现它们是(null).澄清一些代码:

ExpandSearchPageController.h:

@interface ExpandSearchPageController : UIViewController
{
  IBOutlet UITextView * completeMessageView;
}

-(void)checkTextField;

@property (nonatomic, retain) IBOutlet UITextView * completeMessageView;
Run Code Online (Sandbox Code Playgroud)

ExpandSearchPageController.m:

@implementation ExpandSearchPageController

@synthesize completeMessageView;

-(void)checkTextField
{
  NSLog(@"text field: %@",completeMessageView);
}
Run Code Online (Sandbox Code Playgroud)

ExpandSearchPageController被设置为ExpandSearchPage.xib的文件所有者.ExpandSearchPage.xib的UITextView连接到completeMessageView.

我打电话的时候

ExpandSearchPageController * searchExpanderPage = [[ExpandSearchPageController alloc] initWithNibName:@"ExpandSearchPage" bundle:[NSBundle mainBundle]];

[searchExpanderPage checkTextField];
Run Code Online (Sandbox Code Playgroud)

结果是

"text field: (null)"
Run Code Online (Sandbox Code Playgroud)

null objective-c retain iboutlet ios

19
推荐指数
2
解决办法
1万
查看次数

iOS 4阻止并保留计数

我刚刚开始使用积木和Grand Central Dispatch.我被告知(并在Apple文档中阅读)任何块中引用的对象都会被保留.

例如:

^{  
    self.layer.transform = CATransform3DScale(CATransform3DMakeTranslation(0, 0, 0), 1, 1, 1);
    self.layer.opacity = 1;
}
Run Code Online (Sandbox Code Playgroud)

"自我"得到保留,因此泄漏.为了避免这种情况,我需要将self分配给:

__block Object *blockSelf = self;
Run Code Online (Sandbox Code Playgroud)

然后使用blockSelf而不是self在我的块中.

我的问题是:当你的块有更多的代码并引用几个对象时会发生什么?我需要将它们全部分配给__block对象吗?例如:

^{  
    [self doSomething];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"prevName == %@", artistName];
    [request setEntity:entity];
    [request setPredicate:predicate];

    Object *newObject = [[Object alloc] init];
    [someArray addObject];
    [newObject release];
}
Run Code Online (Sandbox Code Playgroud)

iphone memory-management retain ios4 objective-c-blocks

19
推荐指数
1
解决办法
8958
查看次数

发送到解除分配的实例

每当我将视图控制器推到我的堆栈上,然后将其弹出,我收到此错误:

*** -[CALayer retainCount]: message sent to deallocated instance <memory address>
Run Code Online (Sandbox Code Playgroud)

它似乎发生在dealloc正在弹出的视图控制器上调用之后,并且仅对此视图控制器是独占的.我确定CALayer与视图本身有关,因为我不使用它们.

有任何想法吗?

编辑:这是回溯

(gdb) bt
#0  0x01fcd3a7 in ___forwarding___ ()
#1  0x01fa96c2 in __forwarding_prep_0___ ()
#2  0x01fc10e8 in CFGetRetainCount ()
#3  0x01cbc770 in CA::release_root_if_unused ()
#4  0x01cbc707 in x_hash_table_remove_if ()
#5  0x01cbc4ec in CA::Transaction::commit ()
#6  0x01cc4838 in CA::Transaction::observer_callback ()
#7  0x01fa5252 in __CFRunLoopDoObservers ()
#8  0x01fa465f in CFRunLoopRunSpecific ()
#9  0x01fa3c48 in CFRunLoopRunInMode ()
#10 0x027dd615 in GSEventRunModal ()
#11 0x027dd6da in GSEventRun ()
#12 0x0057cfaf …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c calayer retain

18
推荐指数
3
解决办法
7621
查看次数

18
推荐指数
2
解决办法
7029
查看次数

带有合成属性的alloc + init - 它会导致保留计数增加2吗?

我已经看到了以下代码片段:

在标题中:

SomeClass *bla;
@property(nonatomic,retain) SomeClass *bla;
Run Code Online (Sandbox Code Playgroud)

在实现文件中:

@synthesize bla;
Run Code Online (Sandbox Code Playgroud)

然后

self.bla = [[SomeClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

我认为这项任务将'bla'的保留计数提高了两倍; 一旦通过alloc/init调用,然后通过我们要求通过合成属性设置器发生的保留.

因此,我通常会声明我的属性如下:

在标题中:

SomeClass *_bla; // note the underscore
@property(nonatomic,retain) SomeClass *bla;
Run Code Online (Sandbox Code Playgroud)

在实现文件中:

@synthesize bla = _bla;
Run Code Online (Sandbox Code Playgroud)

然后

_bla = [[SomeClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

如果我最初的假设是正确的 - 我有兴趣听听是否有'正确'的方法来做到这一点,即属性的声明,初始化和内存管理?

iphone memory-management properties objective-c retain

17
推荐指数
2
解决办法
3257
查看次数

代理人的"分配"和"保留"属性

对于iOS开发人员,代理几乎无处不在.

似乎我们需要使用"assign"而不是像这样保留一个委托

@property(assign) id delegate;
Run Code Online (Sandbox Code Playgroud)

原因是避免循环循环问题为什么Objective-C委托通常给予属性赋值而不是保留?

我看到很多代码,他们仍然使用"保留".所以这里的问题是,如果我们使用retain作为委托,我们仍会得到循环循环问题吗?

谢谢

delegates properties retain ios assign

16
推荐指数
1
解决办法
2万
查看次数

Swift:如何注销保留对象的数量?

有没有办法快速将对象的保留计数注销到Xcode的控制台?如果没有,那么下一个最佳选择是什么?

iphone reference retain ios swift

16
推荐指数
2
解决办法
1万
查看次数

Swift崩溃在使用UIDocumentInteractionController时点击"在Instagram中打开"

我有以下代码在我的Swift应用程序上分享Instagram上的图像:@IBAction func instagramShareButton(sender:AnyObject){

    let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
    let path = documentsDirectory.stringByAppendingPathComponent("Share Icon.igo")

    let imageName: String = "Share Icon.png"
    let image = UIImage(named: imageName)
    let data = UIImagePNGRepresentation(image!)

    data!.writeToFile(path, atomically: true)

    let imagePath = documentsDirectory.stringByAppendingPathComponent("Share Icon.igo")
    let rect = CGRectMake(0, 0, 0, 0)

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0)
    self.view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    UIGraphicsEndImageContext()

    let fileURL = NSURL(fileURLWithPath: imagePath)
    print("fileURL = \(fileURL)")

    var interactionController = UIDocumentInteractionController(URL: fileURL)

    interactionController.delegate = self

    interactionController.UTI = "com.instagram.exclusivegram"

    let msgBody = "My message"
    interactionController.annotation = NSDictionary(object: msgBody, forKey: …
Run Code Online (Sandbox Code Playgroud)

share release retain instagram swift

15
推荐指数
1
解决办法
5316
查看次数

具有setRetainInstance(true)的片段是否能够在进程关闭后继续存在?

考虑到这种情况:如果我创建了一个活动并且它移动到后台并且此活动包含Fragment设置为,setRetainInstance(true)则Android操作系统可能在某些时候仍然决定关闭活动的托管过程以释放内存.

然后,Activity状态被保存onSaveInstanceState(Bundle)在哪里 - 据我所知 - 将相关Bundle内容写入文件系统,以便在关闭过程中继续存在.(因此束中对象的要求是Serializable).稍后,可以通过新进程检索应用程序状态onRestoreInstanceState(Bundle).

相反,我Fragment被允许包含不一定的变量Serializable.因此,我想,Fragment不能像磁盘一样存储在磁盘Bundle上.那么当进程被杀死时,我的片段会发生什么?

我想知道这个阅读开发人员的指南(http://developer.android.com/guide/components/processes-and-threads.html):

保存当前对用户不可见的活动的进程(已调用活动的onStop()方法).这些过程对用户体验没有直接影响,系统可以随时终止它们以回收前台,可见或服务进程的内存.通常有许多后台进程在运行,因此它们保存在LRU(最近最少使用的)列表中,以确保具有用户最近看到的活动的进程是最后被杀死的进程.如果活动正确实现其生命周期方法并保存其当前状态,则终止其进程将不会对用户体验产生明显影响,因为当用户导航回活动时,活动将恢复其所有可见状态.

我理解上面的杀戮,以便关闭VM实例并将进程的状态写入文件系统(这里是进行Bundle中).稍后读取包以恢复该过程.由于片段的保留不涉及生命周期方法,因为我不知道如何保留例如指向网络连接的指针(你当然不应该在片段中有这样的指针),我想知道片段是否存在如果在此期间关闭该过程,仍然会恢复.我得出结论,他们肯定需要重新创建,因此生命周期方法应尽可能优先setRetainInstance(true)考虑.

这个假设是否有意义?

lifecycle android process fragment retain

13
推荐指数
1
解决办法
4177
查看次数