Ⅰ ios开发中调用私有方法是什么意思
含义:把私有的属性定义在单独的头文件里,把这个头文件不要公开给别人。
在Objective-C中实现私有成员方法的含义是:创建一个让他人较难调用的方法,而并非实现如C++和JAVA般让非当前类对象无法调用的方法。
做法如下:假设需要构建一个类叫做AClass,它提供一个公开成员函数publicMethod和一个“私有成员方 法”privateMethod,那么在AClass.h文件中就有:
Ⅱ 在iOS中什么是公共方法,什么是私人方法
iOS里一般不用公共、私有这种字眼。
如果希望其他对象访问的属性,方法,就在.h文件里声明,这样外部就可以访问他们。
如果不打算给其他对象访问,那就直接在.m文件里声明、定义 变量和方法。
Ⅲ iOS查找私有API
喜接新项目往往预示的会出一堆问题。解决问题的同时往往也就是学到更多东西的时候,这也许就是学习到新东西最直接最快速的方法吧!
我经过努力,新项目终于过测试了,可是被苹果大大给拒了,好苦啊,最近的审核真的是没有谁了。这回被拒是因为项目中存在私有api,下图为被拒信息。
这就坑了啊,这么大一个项目,我如何定位呢?
最麻烦的就是在第三方SDK中的私有api( com.apple.springboard.lockcomplete ),实在不知道如何定位了。在被拒消息中也提示了我们如何定位,网络+Google走一波,学习了一下,随便写个笔记。好记性不如烂笔头嘛!
这个方法是我在被拒信息中看到的苹果大大建议的方法,步骤如下:
还有一种命令,直接生成一个 txt 文件。
运行后会在桌面上出现一个 strings.txt 文件,文件的路径和名字随个人开发习惯
前两步同方法1
terminal中 cd 到 Payload 里面的 app
然后使用如下命令
这个命令会列出你所有使用的系统库,检查一下给出的列表中有没有私有api的库
如果对命令不熟悉还可以使用
去查看命令帮助文档
这个方法是我认为最直接最有效的方法!
到这里,解决上述第三方库的私有API的问题,就是直接替换掉新的SDK,当然如果新的第三方库也有私有API的话,那就只能舍弃了,否则基本无解。
我比较幸运,直接更换最新的 AmazonFling.framework 后,就消除了私有api( com.apple.springboard.lockcomplete )。在发版前,使用这两个方法都进行了验证,私有api不存在了!😄
https://www.jianshu.com/p/921a8b2315ce
Ⅳ IOS怎么获取蓝牙连接到的设备的MAC地址,私有方法也可以
可以获取,code4app.com上有个蓝牙的例子,自己下载看看去。用的就是私有方法。
Ⅳ ios系统判断设备上是否有安装某app的两个方法
1.一般通过url scheme可以判断主流的app。
2.如果要精确收集,只能使用私有api,返回用户所有安装列表,用包名匹配,去掉com.apple.*的系统自带程序。
Ⅵ ios 面试objective-c中有私有方法,私有变量么
一、关于Objective-C私有方法:
下面是网上一博主的部分内容:
在面向对象的开发中,一个很重要的原则就是不要暴露不需要暴露的东西。 在Objective-C中,在头文件中你只能声明类方法和实例方法,这意味着你所有的方法都要暴露在外边。
其实在Objective-C中也可以来声明一个私有方法,这个方法只有本类可见,其他任何类都看不到,即使是继承于这个类的其他子类也无法看到。 方法也比较简单。
@interface Controller : NSObject
{
NSString *something;
}
(void)thisIsAStaticMethod;
- (void)thisIsAnInstanceMethod;
@end
@interface Controller (Private)
- (void)thisIsAPrivateMethod;
@end
只要在头文件或者实现类里面添加一个interface,这个Interface的名字跟头文件里面的一样,只是后面加上了(Private)。现在在这个interface中声明的方法就是私有方法了。
此前是在一博客上看到的,但是发现这个更像是Objective-C中的类目(Category):
二、类目(Category):
类目是Objective-C中最有用的一个特性。实质上,类目允许你为一个已存在的类添加一些方法而不用子类化该类,也不需要你了解该类的实现细节。
这是特别有用的,因为你可以给一个内建的对象添加方法。当你想在你的应用程序里面给所有NSString类型的实例添加一个方法,你只需要添加一个类目,而不需要通过定义一个子类来添加该方法。
比如,我想给NSString添加一个方法以判断它是不是一个URL,写法就像这样:
#import <Cocoa/Cocoa.h>
@interface NSString (Utilities)
- (BOOL) isURL;
@end
这很像一个类的声明。不同的地方在于后面没有列出父类,并且在括号里面写了类目的名称。类目的名字可以随便取,但是最好能表达出你在类目中包含的方法所要做的事。
下面是一个实现。切记,这不是很好的检查URL的方法。我们只是为了说清楚类目的概念。
#import "NSString-Utilities.h"
@implementation NSString (Utilities)
- (BOOL) isURL
{
if ( [self hasPrefix:@"http://"] )
return YES;
else
return NO;
}
@end
现在,你可以使用NSString的这个方法了,下面的代码会在控制台打印“string1 is a URL”:
NSString* string1 = @"http://pixar.com/";
NSString* string2 = @"Pixar";
if ( [string1 isURL] )
NSLog (@"string1 is a URL");
if ( [string2 isURL] )
NSLog (@"string2 is a URL");
与子类不同,你不能通过类目来添加实例变量。但是你能通过类目重写(override)类中已经存在的方法,当然,重写的时候要特别小心。
记住,当你通过类目更改一个类的时候,这个更改会影响你这个应用程序中所有这个类的实例。
三、疑问:
读了上面一和二,发现一中所谓的“Objective-C 私有方法”,此处的私有和C 的私有冒似此私有非彼私有呢!
1. C 中的私有数据成员、私有成员函数对外都是不可见的,即是不可以通过该类的对象或是该类的对象指针进行私有数据成员、私有成员函数进行直接访问的;
2. 既然一中说通过所谓的Objective-C中的类目(Category)即可实现Objective-C中的所谓私有方法,那么该私有方法应该是不可以通过该类的对象实例或指针进行调用的,而二中有if ( [string1 isURL] ),可见此处私有非彼处的私有???求解答!!!^_^
而且,一中的@interface Controller (Private),此处的Private可以是任意的吧,只要实现下面二者一致即可。
@interface Controller (xxx)
@implementationController (xxx)
Ⅶ IOS 单元测试怎么测试私有方法
直接呼叫就好了你还是可以呼叫,只是编译器会给你警告
Ⅷ ios中怎么在外部调用私有方法
因为method2在编译器处理到method1的时候还没有被声明,因此编译器在method1里并不知道method2的存在。新的LLVM已经改进了这个问题
解决方案:
1. 更新你的开发环境到最新的Xcode。
2. 写一个Class Extension,把方法声明在Class Extension里。