如何声明实例variables和方法在类实例外不可见或不可用?

我已经浏览了这个主题上的一堆post。 也许我没有碰到“那个”,有人会指着我这个方向。 问题很简单,可能有一个简单的答案。 如果你有两个ivars,比如说“public_ivar”和“private_ivar”,你应该在哪里/怎么声明它们,以便公开什么是公开的,什么是私人的,不以任何方式暴露给看头文件的人。 同样的问题在“public_method”和“private_method”的情况下。 我喜欢干净的头文件(用其他语言),只显示我想让其他人看到的方法和ivars。 你应该能够发布你的头文件,而不会遇到某人访问他们不应该的东西的危险。 你如何在目标-C中做到这一点。 例如,假设我决定需要使用ivar来跟踪各种类的方法之间的某些数据,计数器或类似的东西,这些方法都需要访问这些信息。 如果这个ivar是在@interface下的头文件中被常规声明的,那么它的存在是公开的,并且任何创build这个类的实例的人都可以使用它。 理想的情况是,这个ivar在class级执行之外根本看不到。

AVPlayer使用资源加载器委托来拖延大型video文件

我正在使用这种方法来保存AVPlayer的video文件的缓冲区数据。 作为这个问题的答案find保存AVPlayer的缓冲区数据 。 iPhone和iPad – iOS 8.1.3 我做了必要的修改来播放video,除非我尝试播放一个非常长的video(11-12分钟长,大约85mb),video将在连接完成后大约4分钟停止播放。 我得到一个事件为播放缓冲空间和播放器项目停滞通知。 这是代码的要点 viewController.m @property (nonatomic, strong) NSMutableData *videoData; @property (nonatomic, strong) NSURLConnection *connection; @property (nonatomic, strong) AVURLAsset *vidAsset; @property (nonatomic, strong) AVPlayerItem *playerItem; @property (nonatomic, strong) AVPlayerLayer *avlayer; @property (nonatomic, strong) NSHTTPURLResponse *response; @property (nonatomic, strong) NSMutableArray *pendingRequests; /** Startup a Video */ – (void)startVideo { self.vidAsset […]

将Objective-C块定义为属性 – 最佳实践

我最近遇到了一个Apple文档 ,显示了以下块的属性声明: @interface XYZObject : NSObject @property (copy) void (^blockProperty)(void); @end 另外,这篇文章指出: 注意:您应该指定copy作为属性属性,因为需要复制一个块以跟踪其捕获的状态超出原始范围。 这不是您使用自动引用计数时需要担心的事情,因为它会自动发生,但是最好的做法是使用property属性来显示结果行为。 有关更多信息,请参阅块编程主题。 我也读了build议的块编程主题,但没有发现任何相关的东西。 我仍然很好奇,为什么将块属性定义为“复制”是最佳实践。 如果你有一个很好的答案,请尝试区分ARC和MRC的差异,如果有的话。 谢谢

app store提交拒绝iOS广告标识符

我的应用因以下原因遭到拒绝,但我没有使用广告标识符。 使用下面的命令 find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep advertisingIdentifier 并得到“二进制文件./libGoogleAnalyticsServices.a匹配”。 关于拒绝的更多细节 解放军3.3.12 我们发现您的应用使用iOS广告标识符,但不包含广告function。 这不符合App Store评论指南要求的iOS开发者计划许可协议的条款。 具体来说,iOS开发者计划许可协议第3.3.12节规定: “您和您的应用程序(以及您与之签约的任何第三方为广告服务)可以使用广告标识符和通过使用广告标识符获得的任何信息,仅用于广告服务。广告标识符,则您同意不直接或间接地将先前的广告标识符和任何派生的信息与重置的广告标识符进行组合,关联,链接或以其他方式关联。 请从您的应用中删除iOS广告标识符,或将广告function添加到您的应用中。

在转换到SpriteKit中的另一个SKScene之后取消分配SKScene

我有一个视图控制器,有三个孩子的skscenes。 当我从一个转换到另一个时,旧的skscene不会被释放。 我希望它被释放,就好像它从来没有。 例: 当我第一次加载应用程序,只有1 skscene可见(说它占用100MB的内存),然后我转移到另一个(100MB多),然后第三个(300MB的内存)。 我最终会有300MB的内存,我想一直有100个。 我怎样才能做到这一点? My view controller: // // ViewController.m // Paddle Jumper // // Created by Chance Daniel on 1/18/14. // Copyright (c) 2014 Max Hudson. All rights reserved. // #import "Flurry.h" #import "ViewController.h" #import "startViewController.h" @implementation ViewController{ BOOL sceneSetUp; } – (void)viewWillLayoutSubviews { if(!sceneSetUp){ [super viewWillLayoutSubviews]; // Configure the […]

如何从移动Safariredirect到本机iOS应用程序(如Quora)?

在我的iPhone上,我只注意到,如果我使用Googlesearch(在Mobile Safari中)并在quora.com上select一个结果,结果页面会在手机上启动本机Quora应用程序。 这是怎么做的? 具体来说,它是检测用户代理和使用iOS URLscheme吗? 它可以告诉本机应用程序是否安装和/或redirect到应用程序商店?

检查分离键盘

许多人都知道iOS 5引入了一个精巧的分离式键盘来进行拇指input。 不幸的是,我有一些依赖于正常的全屏键盘布局的用户界面。 我的一个视图控制器给用户提供了一个文本input表,如果他们点击到键盘覆盖的文本字段,它会随着键盘滑动。 分离键盘不需要此操作。 有没有办法在popup之前检查哪个键盘布局正在使用? 谢谢!

iOS 8 PhotoKit。 从iCloud照片共享相册中获取最大尺寸的图像

如何从iСloud获取全尺寸图像? 每次我试图得到这张照片,我得到图像大小256×342。 我也看不到进展。 码: PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetIdentifier] options:nil]; PHImageManager *manager = [PHImageManager defaultManager]; [result enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) { PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; options.synchronous = YES; options.networkAccessAllowed = YES; options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) { NSLog(@"%f", progress); }; [manager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize […]

在运行AFHTTPSessionManager的AFNetworking 2中设置对并发任务的限制

所以我知道在旧的AFNetworking这是可能的使用AFHTTPClient,我知道如果我使用AFHTTPRequestOperationManager我可以设置队列的限制,但我不能使AFHTTPSessionManager一次只运行x请求,而不自己执行它使用成功块(我不想)。 以下代码不会限制我的连接: AFHTTPSessionManager * manager = [AFHTTPSessionManager manager]; manager.operationQueue.maxConcurrentOperationCount = 1; 在这里有一个有趣的讨论,我有很多的要求,我的服务器,我呛它,直到我超时,所以我真的需要限制我的并发连接。 我错过了什么?

以编程方式在IOS中创build视图(它是如何工作的)?

一个小小的背景:我正在浏览CS193P iTune的video,我被困在作业3上的时间最长。 基本上,分配会要求您以编程方式创build自定义视图以在屏幕上显示形状。 顺便说一句,我没有使用任何视图控制器。 我无法看到我的视图显示,直到我终于在界面生成器中拖动一个视图对象,并将对象名称更改为我的自定义视图类。 所以我的问题是当人们说以编程方式创build一个视图,他们只是说手动创build类,但是当你需要显示它使用IB? 我不禁感到我误解了一些东西? 编辑:让我更清楚。 我的自定义视图已被初始化为0,0,200,150的帧,并且drawRect被重写以在其中绘制正方形。 如果尝试将其添加到控制器的主窗口中,我的视图甚至不会显示出来: UIWindow* window = [UIApplication sharedApplication].keyWindow; [window addSubview:polygonView]; 但是,如果使用在IB拖动视图,并将类更改为我的视图类,它显示正常。 编辑:添加了一些代码。 这是我的控制器的awakeFromNib方法,应该绘制视图。 – (void)awakeFromNib { shape = [[PolygonShape alloc] initWithNumberOfSides:numberOfSidesLable.text.integerValue minimumNumberOfSides:3 maximumNumberOfSides:12]; polygonView = [[PolygonView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; UIWindow *window = [UIApplication sharedApplication].keyWindow; polygonView.backgroundColor = [UIColor blackColor]; [window addSubview:polygonView]; [self updateInterface]; } 我的控制器的updateInterface方法的一部分: – (void)updateInterface […]