iOS 는 react-native 프 리 로드 를 실현 하고 첫 번 째 화이트 스크린 문 제 를 최적화 합 니 다.
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
launchOptions:(NSDictionary *)launchOptions;
그러나 디 버 깅 에서 두 가지 현상 이 발견 되 었 습 니 다.1.react-native 페이지 에 반복 적 으로 들 어가 거나 react-native 페이지 를 종료 하 는 작업 은 RCTBridge 대상 이 반복 적 으로 생 성 되 고 소 거 됩 니 다.가끔 RCTBridge 대상 이 제때에 만 들 지 못 하면 crash 2.네 이 티 브 페이지 와 react-native 페이지 가 서로 이동 하 는 것 은 RCTBridge 도 중복 되 어 만들어 져 메모리 비용 이 많이 든다.
의문 을 가지 고 RCTROtView 를 읽 으 러 갑 니 다.h 세부 사항 발견:
/**
* - Designated initializer -
*/
- (instancetype)initWithBridge:(RCTBridge *)bridge
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties NS_DESIGNATED_INITIALIZER;
/**
* - Convenience initializer -
* A bridge will be created internally.
* This initializer is intended to be used when the app has a single RCTRootView,
* otherwise create an `RCTBridge` and pass it in via `initWithBridge:moduleName:`
* to all the instances.
*/
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
launchOptions:(NSDictionary *)launchOptions;
항목 에 여러 개의 RCTROtView 를 사용 하 는 것 을 볼 수 있 을 때 다음 과 같은 방법 으로 초기 화 하 는 것 을 추천 합 니 다.
- (instancetype)initWithBridge:(RCTBridge *)bridge
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties NS_DESIGNATED_INITIALIZER;
상기 두 가지 현상 과 추천 하 는 API 초기 화 를 통 해 하나의 bridge 대상 을 초기 화하 여 상기 문 제 를 해결 할 수 있 습 니 다.
//.h
@interface BridgeManager: RCTBridge
+ (BridgeManager*)shareInstance;
@end
@interface BridgeHandle : NSObject<RCTBridgeDelegate>
@end
//.m
implementation MallBridgeHandle
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
return [[NSBundle mainBundle] URLForResource:@"index.ios" withExtension:@"jsbundle"];
}
@end
@implementation BridgeManager
static BridgeManager * manager = nil;
static dispatch_once_t onceToken;
+ (BridgeManager*)shareInstance
{
dispatch_once(&onceToken,^{
manager = [BridgeManager alloc] initWithDelegate:[[BridgeHandle alloc] init] launchOptions:nil];
});
return manager ;
}
@end
단일 예 는 프로그램 이 시 작 될 때 초기 화 됩 니 다.테스트 검증 을 통 해 알 수 있 듯 이 메모리 가 최적화 되 고 백 스크린 문제 가 해결 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React Native + Expo 앱을 Deploy(네이티브 빌드)이 기사에서는 까지 작성 도중의 Hello World 앱 (송장 앱 모형)을 Deploy합니다. 또한 expo-cli가 글로벌 설치되어 있다고 가정합니다. 설치했는지 모르는 경우 을 참조하십시오. Windows의 경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.