ios类方法访问
❶ ios类方法中怎么调用实例方法
实例方法是建立实例才有的方法类方法是直接可以使用类引用,不需要实例化就可以使用的方法,一般在项目中类方法都是设置为工具类使用的
❷ ios 怎么调用分类里面的方法
ios category类别的使用
Objective-C提供了一个非常灵活的类(Class)扩展机制-类别(Category)。类别用于对一个已经存在的类添加方法(Methods)。你只需要知道这个类的公开接口,不需要知道类的源代码。需要注意的是,类别不能为已存在的类添加实例变量(Instance Variables)。
类别的基本语法如下:
@interface ClassName(CategoryName)
//method declarations
@end
@interface 类名(类别名)
类别方法申明
@end
注意几点:
1.现有类的类名位于 @interface之后
2.括号中是类别的名称(只要名称唯一,可以添加任意多的类别)
3.类别没有实例变量部分
类别的语法与类的语法非常相似。类别的方法就是类的方法。类别的定义可以放在一个单独的文件中("类别名.h"), 也可以放在一个已存在的类的定义文件中(.h文件)。类别的实现则可放在一个单独的“类别名.m”文件中,或另一个类的实现文件中。这点也与类的定义相似。因为类别的方法就是类的方法,所以类别的方法可以自由引用类的实例变量(无论公有或私有)。
子类(subclassing)是进行类扩展的另一种常用方法。与子类相比,类别最主要的优点是:系统中已经存在的类可以不需修改就可使用类别的扩展功能。例如,假设系统中存在一个类A;另外一个类B中定义了一个类A类型的实例变量,并包含了类A的头文件“#import <A.h>"。假设一段时间后,需要对类A扩展几个新的方法。如果用子类,就需要创建一个子类A-1。如果类B想要使用类A的新方法,就要进行如下修改:1) 将包含的头文件改为"#import<A-1.h>"; 2)将所有用到的类A对象改为类A-1的对象。可以想象,如何有很多类需要用到类A的新功能(比如类A是iOS中的类UIViewController),随着系统的升级(iOS从1.0到5.0),你的程序需要不停地进行这种繁琐地修改。如果使用类别,即使类A升级了,系统中其它的类可以不需任何修改,直接就可以调用类A的新方法。
类别的第二大优点是实现了功能的局部化封装。类别定义可以放在一个已存在的类(类A)的定义文件中(.h)。这意味着这个类别只有在类A被引用的前提下才会被外部看到。如果另一个类(类B)不需要用到类A的功能(没有包含类A的.h文件),也就不会看到依附类A存在的类别。iOS SDK中广泛运用这种类别定义法来封装功能。例如,在 UINavigationController.h中定义了专为UINavigationController扩展的UIViewController类别:
@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationItem *navigationItem;
@property(nonatomic,readonly,retain) UINavigationController *navigationController;
......
@end
如果一个类不引用UINavigationController.h,也就不会看到navigationItem和navigationController这两个性质申明(declared property)。
类别的另一个优点是轻巧(light-weight)。很多时候,对已存在的类所需的扩展仅仅是几个新方法。这时,用类别避免了在系统中留下很多非常短小的“微”子类,使程序更加紧凑。
归纳:
1、实现类别
同实现类相似,实现方法即可
2、 类别的局限性
1.类别不能添加新的实例变量
2.命名冲突,如果类别中方法和类中已有方法同名,则类别具有更高优先级
3 类别的作用
1.将类的实现分散到多个不同文件或多个不同框架中
2.创建私有方法的前向引用
3.向对象添加非正式协议
4 利用类别分散实现
利用类别可以将类的方法分散到多个源文件中
特别指出的是:类别可以访问其继承的类的实例变量
在使用一个方法时,对象的方法是在接口中声明、父类中声明、还是类别中声明并不重要
类别不仅可以分散实现到不同源文件,也可跨框架
5、 使用类别创建前向引用
虽然可以实现未声明的方法,但是编译器会提出警告
通过类别可以提供声明,而且,声明的方法不必要一定在类别的实现中实现,也可以在类的实现中实现
6、 非正式协议和委托类别
委托(delegage)是一种对象,另一个类的对象会要求委托对象执行它的某些操作
委托对象接受其它对象对它的特定方法的调用
其实就是委托对象必须实现别的对象调用的方法,与接口类似
7、 ITunesFinder项目
8 、委托和类别
委托和类别有什么关系?委托强调类别的另一种应用:被发送给委托对象的方法可以声明为一个NSObject的类别
创建一个NSObject的类别称为“创建一个非正式协议”
9、 响应选择器
选择器只是一个方法名称,可以使用@selector()预编译指令指定选择器,其中方法名位于圆括号中,但它以OC运行时使用的特殊方式编码,以快速执行查询
NSObject提供了一个respondsToSelector的方法,询问对象以确定其是否实现某个特定消息
10、 选择器的其他应用
选择器可以被传递,可以作为方法参数,甚至可以作为实例变量存储
❸ ios怎样调用类方法
类方法也叫工厂方法,一般用加号“+”修饰
不需要创建对象就直接可以使用,直接使用类名久可以调用,例如:[NSString stringWithFormat:@"%@",@"123"];
❹ ios 类方法和实例方法的区别
类方法: 也被称为静态方法,指 static关键字修饰的方法。此类方法属于类本身的方法,不属于类的某一个实例(对象)。在类方法中不可以直接使用实例变量。其调用方式有三种,可直接调用、类名、方法名、对象名。
实例方法:指的是不用static关键字修饰的方法,每个实例对象都有自身的实例方法,互相独立,不共享。其调用方式只能是对象名,方法名。
何时用静态方法,何时用类方法?
实例方法: 当你给一个类写一个方法,如果该方法需要访问某个实例的成员变量时,那么方法该被定义为实例方法。 一个类的实例通常有一些成员变量,其中含有该实例的状态信息。而该方法需要改变这些状态,那么该方法需要声明成实例方法。
类方法(静态方法):它不需要访问某个实例的成员变量,不需要改变某个实例的状态,我们把该方法定义为静态方法。
类方法和实例方法的误区:
静态方法常驻内存,实例方法不是。所以静态方法效率更高,但占内存。。(错误的)
事实上,方法都是一样,在加载时机和占用内存上,静态方法和实例方法是一样的。在类型第一次被使用时加载,调用的速度基本没有差别
静态方法在堆上分配内存,实例方法在栈上(错误)
事实上,所有的方法都不可能在堆上或者栈上分配内存,方法作为代码是被分配到特使的代码内存区域,这个代码内存区域是不可写的。
实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。(错误)
事实上,如果一个方法不访问某实例成员变量或者不改变实例状态,那么就应该写成静态方法。
常用实例和类
第一种方式:声明实,调用实例方法
当一个类有多个实例,例如学生这个类,实例可以有学生甲乙丙丁。etc 我们就用第一种方式,在多线程的情况下,只要每个线程创建自己的实例,那么第一种方法通常是线程安全的
第二种:通过静态的实例去调用实例方法
❺ iOS在类内部怎么访问实例变量比较好
A类想调用B类中的变量c:给A一个属性,属性类型是B,然后再对B进行封装,用A对象调用B封装后的方法,然后就可以访问c了
代码:
public class B {
private int c;
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
}
public class A {
private B b;
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public static void main(String[] args) {
A a=new A();
a.getB().getC();
}
}
❻ ioS 开发里面 类方法如何调用实例方法
[[[ObjectClass alloc] init] select];
就是在类方法里创建一个实例然后代用实例方法就可以了
❼ ios 怎么在类方法中 调用类方法
类方法和实例方法 实例方法是— 类开头是+ 实例方法是用实例对象访问,类方法的对象是类而不是实例,通常创建对象或者工具类。 在实例方法里,根据继承原理发送消息给self和super其实都是发送给self 在类方法里面self是其他的类的类方法
❽ iOS对象方法和类方法的区别与调用方式
1、类方法是属于整个类,而不属于某个对象。2、类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量。3、类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问。4、类方法只能访问类方法,而实例方法可以访问类方法和实例方法。5类方法不能被覆盖,实例方法可以被覆盖。
❾ ios开发是如何访问数据库的
第一,我不是高手,第二,我可以分享下我的心得。一般的数据量很小的项目,没必要使用数据库,如果只是保存写用户信息,大可以用其他的方法,用keychain或者nsuserdefault或者其他的都可以。任何一个项目都需要保存一个使用状态,不能每次打开项目的时候都和第一次运行一样,完全新,要给人以使用过的感觉就要存储一些历史数据。如果怕影响用户体验的话,可以多开线程在后台去对数据操作(数据量大的情况下),记得对线程要回收。如果你对保存数据比较迷茫的话,你可以google一下ios的四种数据持久化,对于sqlite和coredata,我个人认为只是两种不同的存储方法,一种是小型轻量级sqlite数据库,所有移动设备经常用到的,还有一种是苹果针对ios操作系统开发的coredata数据存储,具体孰胜孰略还有待你自己去了解,一般如果我的数据库要非常多的表格互相关联最后查询一条结果那么我会采用sqlite,如果存储一些有规律的数据那么我会采用coredata,没有哪个更好的说法,只能说这两种都各有千秋,而我听前辈们说,coredata只是苹果对sqlite的又一次封装而已,方便操作但也局限操作
❿ ios 开发,类方法中怎么样访问成员变量
方法是没有访问级别的,跟ObjectiveC跟C(不是C++)是类似的。
C里面定义了方法,但是如果不给出声明,别人调用时候是找不到的(虽然自己声明一个一模一样的方法也可以)。ObjectiveC也是一样,所有方法都没有访问保护级别(@property属性也是方法的一种)
只有一种有访问级别,就是大括号里面定义的成员变量,里面有public和private,貌似是没有protected的概念(可能有,但是我完全不用的)。