小编nat*_*203的帖子

AFHTTPSessionManager无法解除分配

更新

在将此问题作为问题发布到AFNetworking回购后,事实证明这实际上是我的使用问题.根据我的问题回复:

NSURLSession保留其委托(即AFURLSessionManager).调用invalidateSessionCancelingTasks:确保会话最终确定并释放其委托.

所以,长话短说:如果你AHTTPSessionManager按照下面描述的方式使用,请务必致电invalidateSessionCancelingTasks:以确保会议最终确定并释放他们的代表

原始问题

我有一个子类AFHTTPSessionManager称为GTAPIClient我用来连接到我的REST API.我意识到文档声明要用作单例,但在某些情况下我需要编写一个新实例.但是,似乎每当我这样做时,对象永远不会被释放.目前,在解除分配时,GTAPIClient除了NSLog自身之外,什么都不做.这是一些演示行为的示例代码

GTAPIClient.m

@implementation GTAPIClient
- (void)dealloc
{
    NSLog(@"Dealloc: %@", self);    
}

@end
Run Code Online (Sandbox Code Playgroud)

GTViewController.m

#import "GTBaseEntityViewController.h"

//Models
#import "GTBaseEntity.h"

//Clients
#import "GTAPIClient.h"

@interface GTBaseEntityViewController ()

@property (nonatomic, weak) GTAPIClient *client;
@property (nonatomic, weak) GTBaseEntity *weakEntity;

@end

@implementation GTBaseEntityViewController

- (IBAction)makeClient:(id)sender {

    self.client = [[GTAPIClient alloc] init];
    NSLog(@"I just made an API client %@", self.client);

    //Another random object assigned to a similar property, just …
Run Code Online (Sandbox Code Playgroud)

memory-management objective-c afnetworking-2

7
推荐指数
2
解决办法
2152
查看次数

将UIViewController用于UITableView tableHeaderView

我的问题本质上主要是建筑性的。我正在使用UITableViewController来显示内容列表。没什么大不了的,很标准。但是,其中tableHeaderView包含大量功能。有几个点击目标,会进行动画处理,并且显示会根据用户交互而更改。目前,我有一个自定义的子类,可UIView处理大多数显示逻辑,并通过委托协议将抽头路由回给,UITableViewController以执行。

随着向中添加更多功能tableHeaderView,我感觉好像UITableViewController变得有点混乱和冗长。因此,我很好奇,如果是有意义的创建一个子类,UIViewContoller并将其设置为viewtableHeaderView我的UITableViewController?如果这样做,我将把关注点分开一些,并且可以将几乎所有逻辑容纳在我的新UIViewController中,我想我仍然需要通过两个viewController之间的委托来路由某些通信。

从架构的角度来看这有意义吗?还是应该仅将现有UITableViewController逻辑用于所有逻辑?

**编辑**

例如,将这段代码放在我的 UITableViewController

- (void)addHeader
{
    myCustomHeaderViewController *hvc = [[myCustomHeaderViewController alloc] init];
    //Assume the view for hvc is set up w/re to sizing, etc.
    self.tableView.tableHeaderView = hvc.view
}
Run Code Online (Sandbox Code Playgroud)

design-patterns objective-c uitableview

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

我应该从我的模型或控制器调用我的API吗?

我的问题主要与Objective C中的层次模型的架构或设计模式有关.对于后台我的应用程序相对简单.通常,它与Web服务进行对话,以检索和显示用户可以遵循的内容.当有人关注某事时,他们所关注的事物在概念上被存储,以便稍后通过发布到Web服务来访问.

我想建议逻辑应该去哪里管理Web服务和用户遵循的事物组之间的交互.

例如,是否适合创建一个模型对象,例如MyStuffModel一个名为followedThingshold的AThingModel对象的数组属性?如果是这样,是否可以在模型中编写和执行从Web服务等刷新的逻辑?

潜在的代码示例

@interface MyStuffModel : NSObject

@property (nonatomic, strong) NSArray *followedThings;

- (void)refreshAllFollowedThingsFromWebService;

@end

@implementation MyStuffModel

- (void)refreshAllFollowedThingsFromWebService
{
    //call my API client (built on AFNetworking), get back a response
    //populate followedThings, notify a view controller, etc

}

@end
Run Code Online (Sandbox Code Playgroud)

或者,如果我没有MyStuffModel对象并通过直接从视图控制器调用我的API客户端来管理对我的Web服务的调用?

根据您的经验,需要采用哪种方法?或者还有另一种方式吗?

design-patterns objective-c ios

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

使用单例来创建基本样式助手类

我是objective-c的新手,我有一个建筑或设计模式问题.我正在构建一个ios应用程序,像大多数ios应用程序一样,它使用各种颜色,字体,模式等.也许我目前正在编写错误的代码,但我发现自己重写了颜色设置等内容.结果,改变颜色成为查找代码中的所有颜色设置,重写它们等的练习.对我来说似乎有点低效.

例如,我在我的应用程序中的多个位置使用深红色.我倾向于频繁地编写[UIColor colorWithRed ...]方法.但是,我很好奇是否创建一个返回我的自定义颜色的单例(作为UIColor)是"模块化我的样式包"的合理方法.因此,我可以写这样的东西

[label setTextColor:[[MyStyleSingletonClass sharedStyler] myDarkRed]];
Run Code Online (Sandbox Code Playgroud)

因此,如果设计师突然希望myDarkRed变得更暗,我会改变它一次并且很好地浏览应用程序.显然,风格和用户体验比色彩还要多,但我很好奇这种方法是否有意义,或者我是否在为将来的问题做好准备.或者也许这个功能已经存在于objective-c中,我错过了这一点.提前致谢.

singleton objective-c uicolor ios

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