天天看點

IOS之學習筆記三(簡單對象和static和單例)

1、Person.h

#import <Foundation/Foundation.h>
 
@interface Person : NSObject
{
    NSString *_name;
    int _age;
}  
-(void)setName:(NSString *) name andAge:(int) age;
-(void)say:(NSString *)content;
-(NSString *)info;
+(void)foo;
@end      

Person.m

#import "Person.h"
 
@implementation Persion 
{
    int test;
}
 
-(void)say:(NSString *)content
{
    NSLog(@"%@", content);
}
 
-(NSString *)info
{
    [self test];
    return [NSString stringWithFormat:@"名字:%d, 年齡%d,", _name, _age];
}
 
+(void)foo 
{
    NSLog(@"通過類名調用");
}
 
-(void)test
{
    NSLog(@"this is a test method");
}
@end
 
-(void)setName:(NSString *) _name andAge:(int) _age
{
    //記得這裡是self->_name不是self._name,一定要注意。
    self->_name = _name;
    self->_age = _age;
}
 
Person *person = [[Person alloc] init];
[person say:@"hello"];
[person setName:@"chenyu" andAge:26];
NSString *info = [person info];
NSLog(@"info is %@", info);
[Persion foo];      

2、id類型可以代表所有對象的類型,可以任何類的對象指派給id類型變量

id p = [[Person alloc] init];

[p say:@"hello"];

3、oc沒有類變量,但是可以通過内部全局變量來模拟類變量

oc也提供了static關鍵字,但是static不能用于修飾成員變量,隻能修飾局部變量,全局變量和函數,static修飾局部變量表示将該局部變量存儲在靜态存儲區,static修飾全局變量用于限制全局變量隻能在目前源檔案中通路,static修飾函數用于限制函數隻能在目前檔案中調用

模拟類變量

User.h檔案如下

#import <Foundation/Foundation.h>
@interface User : NSObject
+(NSString *)nation;
+(void)setNation:(NSString *)newNation;
@end      

User.m檔案如下

#import "User.h"
@implement User 
static NSString *nation = nil;
+(NSString *)nation
{
    return nation;
}
+(void)setNation:(NSString *)newNation
{
    nation = newNation;
}
@end
 
int main(int argc, char* argc[]) 
{
    @autoreleasepool {
    [User setNation:@"chenyu"];
        NSLog(@"nation is %@", [User nation]);
    }
}      

4、單例模式

Singleton.h檔案如下

#import <Foundation/Foundation.h>
@interface Singleton : NSObject
+(id)instance;
@end      

Singleton.m檔案如下

@implemnet Singleton
static id instance = nil;
+(id)instance 
{
   if (instance) 
   {
       instance = [[super malloc] init];
   }
   return instance;
}
@end
 
int main(int argc, char* argc[]) 
{
    @autoreleasepool {
        NSLog(@"%d", [Singleton instance] == [Singleton instance]);
    }
}