Oli*_*ver 8 iphone sdk ipod ipad ios
我根据不同的来源编写了以下UIDevice类别.我已经升级了这个platformCode
方法,所以它的水平低于可以看到的水平.
这很好用,但platformCode
方法很低.你知道这种电话是否可以用Cocoa Touch代码取代吗?这是相关的代码:
UIDevice_enhanced.h
@interface UIDevice (Enhanced)
typedef enum {
kUnknownPlatform = 0,
kiPhone1G,
kiPhone3G,
kiPhone3GS,
kiPhone4,
kiPhone4Verizon,
kiPhone4S,
kiPodTouch1G,
kiPodTouch2G,
kiPodTouch3G,
kiPodTouch4G,
kiPad,
kiPad2Wifi,
kiPad2GSM,
kiPad2CMDA,
kSimulator
} PlatformType;
- (NSString *) platformName;
- (PlatformType) platform;
@end
Run Code Online (Sandbox Code Playgroud)
UIDevice_enhanced.m
#import "UIDevice_enhanced.h"
#include <sys/utsname.h>
@interface UIDevice (Enhanced)
- (NSString *) platformCode;
@end
@implementation UIDevice (Enhanced)
// Utility method (private)
- (NSString*) platformCode {
struct utsname systemInfo;
uname(&systemInfo);
NSString* platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
return platform;
}
// Public method to use
- (NSString*) platformName {
NSString* platform = [self platformCode];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([platform isEqualToString:@"i386"]) return @"Simulator";
return platform;
}
// Public method to use
- (PlatformType) platform {
NSString *platform = [self platformCode];
if ([platform isEqualToString:@"iPhone1,1"]) return kiPhone1G;
if ([platform isEqualToString:@"iPhone1,2"]) return kiPhone3G;
if ([platform isEqualToString:@"iPhone2,1"]) return kiPhone3GS;
if ([platform isEqualToString:@"iPhone3,1"]) return kiPhone4;
if ([platform isEqualToString:@"iPhone3,2"]) return kiPhone4Verizon;
if ([platform isEqualToString:@"iPhone4,1"]) return kiPhone4S;
if ([platform isEqualToString:@"iPod1,1"]) return kiPodTouch1G;
if ([platform isEqualToString:@"iPod2,1"]) return kiPodTouch2G;
if ([platform isEqualToString:@"iPod3,1"]) return kiPodTouch3G;
if ([platform isEqualToString:@"iPod4,1"]) return kiPodTouch4G;
if ([platform isEqualToString:@"iPad1,1"]) return kiPad;
if ([platform isEqualToString:@"iPad2,1"]) return kiPad2Wifi;
if ([platform isEqualToString:@"iPad2,2"]) return kiPad2GSM;
if ([platform isEqualToString:@"iPad2,3"]) return kiPad2CMDA;
if ([platform isEqualToString:@"i386"]) return kSimulator;
return kUnknownPlatform;
}
@end
Run Code Online (Sandbox Code Playgroud)
这可以被认为是一种“objective-c”方式:
\n\n// Utility method (private)\n- (NSString *)platformCode {\n // This may or not be necessary \n // Im not sure if you can have a device thats not currentDevice can you?\n // if ([self isEqual:[UIDevice currentDevice]]) {\n\n\xc2\xa0 \xc2\xa0 NSString* platform = \xc2\xa0[[self.systemName copy] autorelease];\n\xc2\xa0 \xc2\xa0 return platform;\n\n // Could probably shorten to just\n // return [[self.systemName copy] autorelease];\n\n // or - return [NSString stringWithString:self.systemName];\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n这将是 obj-c 版本utsname
machine
(来自这一行:NSString* platform = \xc2\xa0[NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
。
\n\n\n\n\n这
\n\n<sys/utsname.h>
头定义了结构体 utsname,其中至少包括以下成员:\n
char sysname[]
操作系统的此实现的名称
\nchar nodename[]
依赖于实现的通信网络中的此节点的名称
\nchar release[]
此实现的当前版本级别\n 此实现
的char version[]
当前版本级别\n 发行版
\nchar machine[]
硬件类型的名称\n 系统正在其上运行
\n\n\n\n
systemName
接收方所代表的设备上运行的操作系统的名称。(只读)
\n@property (nonatomic, readonly, retain) NSString *system
但是,由于 systemName 仅返回@“iPhone OS”,因此要获取实际的设备型号,您必须使用 c 代码。这是另一种方法:
\n\n#include <sys/types.h>\n#include <sys/sysctl.h>\n\n- (NSString *)machine {\n size_t size;\n\n // Set \'oldp\' parameter to NULL to get the size of the data\n // returned so we can allocate appropriate amount of space\n sysctlbyname("hw.machine", NULL, &size, NULL, 0); \n\n // Allocate the space to store name\n char *name = malloc(size);\n\n // Get the platform name\n sysctlbyname("hw.machine", name, &size, NULL, 0);\n\n // Place name into a string\n NSString *machine = [NSString stringWithCString:name];\n\n // Done with this\n free(name);\n\n return machine;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
6116 次 |
最近记录: |